5、主从复制

复制的基本原理

MySQL 主从复制通过 三个主要过程 实现数据的同步,涉及主服务器上的一个线程和从服务器上的两个线程。

角色 过程 线程 作用
主服务器 记录与发送 Binlog Dump 线程 将所有数据库更新操作写入 Binary Log,并将其传输给从服务器,这些记录过程叫做二进制日志事件。
从服务器 接收与写入 I/O 线程 连接主服务器,接收 Binary Log 中的更新操作,并将其复制写入到本地的 Relay Log(中继日志) 文件中。
从服务器 执行与同步 SQL 线程 读取 Relay Log 中的更新操作,并在从服务器上依次执行这些操作「异步串行」,最终实现主从数据同步。

关键点总结

复制的基本原则

一主一从常见配置

mysql版本一致且后台以服务运行
主从都配置在[mysqld]结点下,都是小写

主机(windows)修改my.ini配置文件

# [必须]服务器唯一ID
server_id=1
# [必须]启用二进制文件
log-bin=E:/a_work/a_tools/PhpStudy2018/PHPTutorial/MySQL/mysqlbin
# [可选]启用错误日志,这条配置暂时不能配置,导致mysql启动失败
log-err=E:/a_work/a_tools/PhpStudy2018/PHPTutorial/MySQL/mysqlerr
# [可选]根目录
basedir=E:/a_work/a_tools/PhpStudy2018/PHPTutorial/MySQL/
# [可选]临时目录
tmpdir=E:/a_work/a_tools/PhpStudy2018/PHPTutorial/MySQL/
# [可选]数据库目录
datadir=E:/a_work/a_tools/PhpStudy2018/PHPTutorial/MySQL/data/
# [可选]是否开启只读(0 : 否 1 : 是)
read-only=0
# [可选]忽略复制的数据库
binlog-ignore-db=mysql
# [可选]设置需要复制的数据库
binlog-do-db=riven

从机(linux)修改my.cnf配置文件

server-id=2 #[必须]主服务器唯一ID
log-bin=mysql-bin #[必须]启用二进制文件

因修改过配置文件,主机、从机都需要重启后台mysql服务

window

net stop mysql

linux

service mysql restart

主从机都关闭防火墙

window手动关闭

service iptables stop # 关闭虚拟机linux防火墙

在Windows主机上建立帐户并授权slave

授权

# 示例
GRANT REPLICATION SLAVE ON *.* 
TO '主机账号'@'从机ip' 
IDENTIFIED BY '主机密码';

# 实例
GRANT REPLICATION SLAVE ON *.* 
TO '192.168.31.101'@'192.168.31.103'
IDENTIFIED BY 'root';

刷新mysql状态

FLUSH PRIVILEGES;

刷新binlog日志

flush logs;

查询master的状态

记录下File(二进制文件)、Position(磁盘位置) 的值

注意:执行完此步骤后不要再操作主服务器,防止主服务器状态值变化

show master status;
+-------------+---------+------------+----------------+-----------------+
|File         |Position |Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|
+-------------+---------+------------+----------------+-----------------+
|binlog.000048|993674618|            |                |                 |
+-------------+---------+------------+----------------+-----------------+
  1. File
    • 表示主服务器当前正在使用的 Binary Log 文件名
    • 在主从复制中,它指明了从服务器将从哪个 binlog 文件开始复制。
    • 它是 CHANGE MASTER TO 语句的一个参数。
  2. Position
    • 表示下一个将被记录事件的 起始位置(偏移量)。
    • 其值通常与当前 binlog 文件的大小相同。
    • 在主从复制中,它指明了从服务器将从该 binlog 文件的哪个位置开始复制。
    • 它是 CHANGE MASTER TO 语句的一个参数。
  3. Binlog_Do_DBBinlog_Ignore_DB
    • 是主服务器用于 过滤 写入 Binary Log 文件内容的选项。
    • 默认值为空,表示主服务器不对写入 binlog 的操作进行任何过滤。

注: 若主机MySQL高于5.6,从机MySQL版本低于5.6
需要设置以下参数,因MySQL5.6以下版本没有此参数,所以得禁用

binlog_checksum = none # 禁用该参数

在Linux从机上配置需要复制的主机

配置从机

指定主服务器信息

# 实例
CHANGE MASTER TO MASTER_HOST='192.168.31.101', # 主机ip
MASTER_USER='root', # 主机账号
MASTER_PASSWORD='root', # 主机密码
MASTER_LOG_FILE='mysql-bin.000021', # 二进制文件
MASTER_LOG_POS=612; # 偏移量

启动从服务器复制功能

start slave;

查询是否配置成功

show slave status \G

下面两个参数都是Yes,则说明主从配置成功!

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主机新建库、新建表、insert记录,从机复制

停止从服务复制功能

# 关闭从服务
stop slave;
# 重置从服务
reset slave;