docker mysql5.7 配置主从复制
拉取mysql5.7镜像
docker pull mysql:5.7
运行容器
docker run -di --name master -p3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 docker run -di --name slave -p3308:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
docker ps -a // 查看启动中的容器
3307端口的为master,3308的为slave。
创建成功后,Navicat客户端登录(win7 docker默认ip为:192.168.99.100):
Master配置
进入容器:
docker exec -ti master bash
使用命令行进入mysql:
mysql -u root -p
接着输入root用户的密码(密码忘记的话就网上查一下重置密码吧~),然后创建用户:
//172.17.0.3是slave docker从机的IP;即:master = 172.17.0.2 , slave = 172.17.0.3
// 或者使用下面命令获取容器的元信息
docker inspect master
// 创建用户 GRANT REPLICATION SLAVE ON *.* to 'slave'@'172.17.0.3' identified by 'slave';
flush privileges;
创建的这两个用户在配置slave从机时要用到。
接下来在找到mysql的配置文件/etc/mysql/my.cnf,增加以下配置:
[mysqld]
# 开启binlog log-bin=mysql-bin server-id=3307 # 需要同步的数据库,如果不配置则同步全部数据库 binlog-do-db=test_db # binlog日志保留的天数,清除超过10天的日志 # 防止日志文件过大,导致磁盘空间不足 expire-logs-days=10
譬如:
配置完成后,退出重启mysql:
docker restart master
Slave配置
进入容器:
docker exec -ti slave bash
找的my.cnf文件,路径:/etc/mysql/my.cnf,录入下面的信息:
[mysqld] server-id=3308 log-bin=mysql-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1
然后继续配置:
change master to master_host='172.17.0.2',master_user='slave',master_password='slave',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=617,master_connect_retry=30;
设置完之后需要启动:
# 启动slave服务 start slave;
然后继续执行:
show slave status\G;
成功效果:
效果
在新建数据库时,主从库效果如下:
大功告成~