注:mysql版本一致
编辑docker容器中的mysql服务挂载在宿主机上的my.cnf文件,位置为/usr/mysql/conf/my.cnf(如果没有在宿主机上挂载配置文件,可以进入容器内部修改该配置文件);
vim打开my.cnf文件中找到[mysqld],添加以下配置:
## 同一局域网内要注意唯一(一般设置为ip地址最后一位)
server-id=100
## 开启二进制日志功能,名字可以随便取
log-bin=mysql-bin
保存配置文件,使用docker restart 容器名称[ID] 命令重新启动容器
创建数据库同步用户,并且进行授权:
mysql > CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';
与master一样,vim打开my.cnf文件
在my.cnf文件中找到[mysqld],在其下面添加如下内容:
server-id = 102
log-bin=mysql-slave-bin
## relay_log配置中继日志,日志名字可以随便取
relay_log=edu-mysql-relay-bin
重新启动docker容器
在master执行如下sql语句:
mysql > show master status;
出现如下所示的结果:
记录File字段和Position字段的值,后面使用;
在slave中执行如下所示的sql语句:
mysql > change master to master_host='192.168.1.100', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=2830, master_connect_retry=30;
参数解释: a)master_host: mater所在容器的ip地址(如果两个容器分别在两台宿主机上,也可以是宿主机的ip)
b) master_user: master上的用于数据同步的用户
c) master_password: 数据同步用户的密码
d) master_port:master的端口号
e) master_log_file: 指定slave从哪个日志文件开始复制数据,即上文提到的File字段
f) master_log_pos: 指定slave从日志文件中的哪个位置开始复制,即上文提到的position字段
g) master_connect_retry: 如果连接失败,重试的时间间隔,单位是秒,默认是60
在slave上执行以下的sql语句:
mysql > start slave;
查看主从状态,在slave上执行以下语句:
mysql > show slave status \G;
以上两个参数都显示为yes即表示配置完成,可以在master上操作数据库或者表,在slave上验证是否已经复制操作。