1. docker命令新建mysql-master,只是简单测试,没有设置映射,只是验证主从连接,需要可自行添加
docker run --restart=always --name mysql-master --privileged=true -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
2. 进入master容器命令,复制配置文件
#1. 进入容器
docker exec -it mysql-master /bin/bash
#2. 查看mysql在哪里,复制出来,改好在复制进去
ls
cd /etc
ls
3. 由容器内复制到宿主机命令:
docker cp mysql-master:/etc/my.cnf D:/docker-data
4. 使用notepad++ 配置下mysql-master 的my.cnf配置文件
#binlog文件名
log-bin=mysql-bin
#忽略库
binlog-ignore-db=mysql
#同步库,不要先创建
binlog-do-db=syncdb
#binlog格式
binlog_format=STATEMENT
#需要备份的数据库名 ,需要另起一行添加,用,分割不能识别多个库
binlog-do-db=test
#例 binlog-do-db=test2
#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步
log_bin_trust_function_creators=TRUE
# binlog日志保留的天数,清除超过10天的日志
# 防止日志文件过大,导致磁盘空间不足
expire-logs-days=10
5. windows 进入在配置文件的文件夹下,输入下面的复制命令,将原始配置文件覆盖。切记,先cd 到windows的配置文件夹下再输入命令:
docker cp my.cnf mysql-master:/etc/
#复制进入后,进入容器
docker exec -it mysql-master /bin/bash
#
cd /etc
# 查看是否覆盖成功
cat my.cnf
# 成功退出
exit
# 重启mysql-master
docker restart mysql-master
6. 在master中创建用户并授权
创建一个“slave”的用户(密码:root)用来同步
先进入master内部
docker exec -it mysql-master bash
#登录mysql
mysql -uroot -proot
#创建用户
create user 'slave'@'%' identified by 'root';
#授权
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
#mysql8需要执行额外的操作
alter user 'slave'@'%' identified with mysql_native_password by 'root';
flush privileges;
以上命令,我使用navicat 控制台输入的,一样的效果,也可以登录mysql 执行
查看状态: 成功如下 position记得查看数字,下面命令配置会用到
#show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1142 | syncdb | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
master配置完毕,现在设置mysql-slave
1. 创建slave服务 并设置端口为3307
docker run --restart=always --name mysql-slave --privileged=true -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
2. 同理配置my.cnf,改好配置后,复制进容器,覆盖容器的配置文件 并重启
[mysqld]
server_id=102
#中继日志名
relay_log=mysql-relay
3.重启slave
docker restart mysql-slave
4. 另外还需要验证服务之间的网络连接是否畅通,进入mysql-slave容器
# 登陆
docker exec -it mysql-slave bash
#1. 连接mysql
mysql -uroot -p123456 -h 172.17.0.2
连接成功示例, 如果不成功则检查网络是否配置错误,docker网络配置,服务器防火墙配置,阿里控制台端口配置等 再仔细检查:
5. 继续配置mysql-slave ,navicat 登陆mysql-slave输入配置命令:
# 这个也需要看看是否需要修改 比如master_log_pos=1142 ,master_password=root密码
change master to master_host='172.17.0.2',master_user='slave',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=1142;
6.启动slave, 在mysql-slave输入命令:
#mysql下
start slave;
7. 查看状态:
#mysql下
show slave status;
8. 测试是否成功,在master新建数据库syncdb 并建表,
从库也看到了数据
错误:
如果出现同库不能同步情况,可以试试重置,并开启:
reset slave;
start slave;
这个没用过,重置主从连接:
stop slave;
reset master;