docker pull mysql
docker run -p 3388:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql --server-id=1 --log-bin=bin-log --binlog-do-db=znzm-dlaq
说明:
docker run -p 3389:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql --server-id=2 --relay-log=mysql-relay --read-only=1
说明:
--server-id=2
设置唯一id--relay-log=mysql-relay
relay-log日志文件名,因为主从复制时去主库复制过来后,会先写入这个本机日志,然后再写入sql库里--read-only=1
表示从库,只读不能写进入主库,密码是123456
docker exec -it master /bin/bash
mysql -u root -p
下面是创建主从读写分离账户,可自定义:
# 创建一个用户名slave1,密码123456
CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则报错
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 使权限生效
flush privileges;
查询主库的状态,并记录下File和Position的值,下面从库连接主库时要用。
show master status;
Crtl+D退出容器,查看主库容器本地ip。
docker inspect --format={{.NetworkSettings.IPAddress}} master
进入从库,密码是123456
docker exec -it slave /bin/bash
mysql -u root -p
配置主从连接
CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_PORT=3306,MASTER_USER='slave1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='bin-log.000003', MASTER_LOG_POS=1145;
说明:
启动主从同步:
START SLAVE;
执行sql语句,检查主从同步是否搭建成功
SHOW SLAVE STATUS\G;
如果有异常,请停止主从同步后,重新配置
stop slave;
reset slave;
!!!注意:是从库读取主库的日志来操作,不要颠倒