拉取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.4 , slave = 172.17.0.5
// 或者使用下面命令获取容器的元信息
docker inspect master
创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '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 -it /bin/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
配置完成后,退出重启mysql:
docker restart slave
master: 进入master容器
docker exec -it master /bin/bash
mysql -uroot -p123456
show master status;
slave:进入slave
change master to master_host='172.17.0.4', master_user='slave', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=617;
开始复制:start slave
查看:show slave status \G;
完成主从复制测试: