3. 使用 Docker 搭建 MySQL 主从复制¶
3.1. 主从复制原理¶
复制原理 mysql的复制原理大致如下。
主库开启bin-log二进制日志功能,并建立slave账号,并授权从库连接主库,从库通过change master得到主库的相关同步信息。mysql主库在事务提交时会把数据库变更作为事件Events记录在二进制文件binlog中;mysql主库上的sys_binlog控制binlog日志刷新到磁盘。
从库然后连接主库进行验证,主库产生的新数据会导入到bin-log二进制文件中,同时主库会开启IO线程,从库也会开启IO线程以及SQL线程,从库中的IO线程与主库的IO线程连接一旦主库库数据有所变更则从库将变更的数据复制到relary-bin(中继日志)中。SQL线程会读取relay log(中继日志)文件中的日志,并解析成具体操作,至此整个同步过程完成。
3.2. 主从复制操作¶
3.2.1. 流程命令集¶
# 1、搭建部署 mysql
docker run --name mysql1 -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --name mysql2 -p 33062:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# 2、主机配置
## 2.1、进入mysql
mysql -u root -h 127.0.0.1 -P 33061 -p
## 2.2、 主机配置 配置一个从机登录用户
GRANT REPLICATION SLAVE ON *.* TO 'user'@'%' IDENTIFIED BY '123';
## 2.3、进入docker容器
docker exec -it mysql1 bash
## 2.4、需要修改 MySQL 的配置,开启 binlog
vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 3、从机配置
## 3.1、进入mysql
mysql -u root -h 127.0.0.1 -P 33061 -p
## 3.2、从配置 配置一个从机登录用户
change master to master_host='192.168.66.114',master_port=33061,master_user='user',master_password='123',master_log_file='binlog.000001',master_log_pos=154;
## 3.3、 slave 启动或停止
start slave;
stop slave;
## 3.4、 查看slave配置正确与否
show slave status\G;
####Slave_IO_Running 和 Slave_SQL_Running ,这两个的值必须为 Yes。
3.2.2. 配置相关文件¶
3.2.2.1. 主机MySQL 配置文件 mysqld.cnf¶
binlog 的开启,需要修改 MySQL 的配置,因此,我们需要进入到容器内部去执行。
docker exec -it mysql1 /bin/bash
MySQL 配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf
追加以下内容
# 第一行表示配置 binlog 的位置,理论上 binlog 可以放在任意位置,但是该位置,MySQL 一定要有操作权限。
log-bin=/var/lib/mysql/binlog
#server-id 表示集群中,每个实例的一标识符
server-id=1
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
File 和 Position 需要记着,这两个标记了二进制日志的起点位置,在从机的配置中将使用到这两个参数。
3.2.2.2. 从机配置¶
show slave status;
Slave_IO_State
: 当前I/O
线程的状态Master_Log_File
: 当前同步的主服务器的二进制文件Read_Master_Log_Pos
: 当前同步的主服务器的二进制文件的偏移量,单位为字节,如图中为已经同步了12.9M(13630580/1024/1024)
的内容Relay_Master_Log_File
: 当前中继日志同步的二进制文件Slave_IO_Running
: 从服务器中I/O
线程的运行状态,YES
为运行正常Slave_SQL_Running
: 从服务器中SQL
线程的运行状态,YES
为运行正常Exec_Master_Log_Pos
: 表示同步完成的主服务器的二进制日志偏移量Seconds_Behind_Master
: 表示从服务器数据比主服务器落后的持续时长