基于docker容器的mysql5.6 主从复制实践

说明:我在上一篇文章中,已经在docker上安装了mysql,两个docker容器都已安装了mysql,端口和ip分别是:172.17.0.2:3307,172.17.0.3:3308,其中3307的作为主机,3308作为从机。具体主从复制的原理,这里就不说了,自行百度,这里给个参考链接:https://segmentfault.com/a/1190000008942618
下面讲述具体操作流程:
首先,在主机上操作:
1、创建专门用于复制的用户:
create user ‘repl’@‘172.17.0.%’ identified by ‘root’
2、给新创建的用户授权,由于显示原因,这里配图:
基于docker容器的mysql5.6 主从复制实践
3、配置my.cnf配置文件,这里读者可简单复制使用,但是记得修改下server-id,这个必须是唯一的,对于每个mysql服务器来说。

[mysqld]

server-id		    = 2
port                        = 3307
datadir                      = /var/lib/mysql
socket                       = /var/lib/mysql/mysql.sock
default-storage-engine          = InnoDB
log-bin                      = mysql-bin
log-bin-index                 = mysql-bin.index
relay-log                    = mysql-relay
relay-log-index               = mysql-relay.index
expire-logs-days              = 10
max-binlog-size              = 100M
max_binlog_cache_size        = 8M
log-slave-updates             = 1
binlog_cache_size            = 4M

# use MIXED binlog
binlog_format               = MIXED
#binlog_format              = ROW

#replicate-do-db             = db%.%
#replicate-ignore-db          = mysql.%

# ignore tables
replicate-wild-ignore-table     = mysql.%
sync_binlog                 = 1
relay_log_recovery           = 1
log_slave_updates           = 1
skip-name-resolve

sql_mode=STRICT_TRANS_TABLES

[mysqldump]
quick
max_allowed_packet = 32M

读者注意,这里的初始/etc/my.cnf文件是直接把 /usr/share/mysql/my-default.cnf 复制过来的。在把上述配置复制进去的时候记得注释掉原来的sql_model!
4、重启mysql
systemctl restart mysql

在从机上操作:
1、重复主机3-4操作,记得修改server-id;
2、进入mysql后执行:
stop slave;
3、change master to master_host=‘172.17.0.2’,
master_port=3307,
master_user=‘repl’,
master_password=‘root’,
master_log_file=‘mysql-bin.000001’,
master_log_pos=120;
4、start slave

到这里,主从复制就OK了。检测:
如下图:
基于docker容器的mysql5.6 主从复制实践
执行show slave status\G; 命令,如上图,slave_io_running和slave_sql_running 都是yes就OK了。需要注意的是,上面3步骤指向的是主机的mysql服务器信息,如果修改了mysql端口,上面的端口master_port一定要修改,否则slave_io_running就一直是 connecting。

查看实际效果:
我用navicat检测的,刚开始,我是没有创建任何库和表的,然后我用navicat在主表上创建数据db1,创建user表,从库也马上看得到。
基于docker容器的mysql5.6 主从复制实践