配置主节点Master:
通过容器名或者容器id进入容器内部,为了方便记忆我将两个容器改名,
$ docker rename mysql mqMaster
$ docker rename mysql001 mqSlave
进入主节点容器:$decker exec -it mqMaster /bin/bash 或者 $docker exec -it fbc57268b52f /bin/bash
进入配置目录MySQL下:cd /etc/mysql
编辑MySQL配置文件my.cnf
{这里需要容器安装vim编辑器,第一次,$apt-get install vim,若报错:E: Unable to locate package vim
先执行apt-get update,再此执行$apt-get install vim。直到安装成功,这里不再赘述。}
# vi my.cnf 再my.cnf配置文件中添加下列配置:
[mysqld]
##server-id可以是任意值,但要保证同一局域网内唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
:wq,退出保存配置文件。重启MySQL,#service mysql restart。MySQL的重启会导致docker容器的终止。
需要重新启动容器:$docker start mqMaster 。
同样的进入容器内部,登陆MySQL:$mysql -u -root -p,输入密码:123456(创建容器时已设置)
为Master节点创建数据同步用户,并授权REPLICATION SLAVE权限和REPLICATION CLIENT权限。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
主节点配置完毕。
配置从节点Slave:
在my.cnf中添加配置:
[mysqld]
## server-id可以是任意值,但要保证同一局域网内唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
重启MySQL服务→service mysql restart
重启容器→docker start mqSlave
进入容器→docker exec -it mqSlqve /bin/bash
登陆MySQL→mysql -u root -p
键入密码→等待下一步操作。
============
Master节点:
同理开启主节点,运行主节点MySQL,执行show master status;
记录file和position值。
Slave节点:
change master to master_host='192.168.*.*', master_user='slave', master_password='123456', master_port=****, master_log_file='mysql-bin.000003', master_log_pos= 0, master_connect_retry=30;
★★★★★这里很重要,我曾为这个浪费了不少时间,看了很多贴子,诸多原因,导致后来配置后没同步。这里留下说明。
1、master_host→docker宿主机的IP,可以通过ifconfig获取
2、master_user→Master主节点创建的用来同步的账号
3、master_password→Master主节点创建的用来同步的账号密码
4、master_port→主节点容器的端口号
5、master_log_file→主节点master的file值
6、master_log_pos→0:从0开始复制,也可以是主节点master的position值。
7、master_connect_retry→如果连接失败,重试的时间间隔,单位是秒,默认是60秒。
======
开启slave→start slave,执行 show slave status \G; 查看主从同步状态:
看到该两项值为yes,说明配置成功。
主从配置完毕,检验:
主节点创建数据库test001:
检查从节点:
主从同步完成。