# docker mysql8 主从同步
# 步骤一
主配置文件 master/my.cnf
[mysqld]
# 主数据库端ID号
server_id = 101
# 开启二进制日志
log-bin = mysql-bin
# 指定slave要复制哪个库
binlog-do-db=mydb
# 不需要复制的数据库名
binlog-ignore-db = mysql
binlog_cache_size=1M
# 二进制日志自动删除的天数,默认值为0,表示“没有自动删除”,启动时和二进制日志循环时可能删除
expire_logs_days = 7
# 将函数复制到slave
log_bin_trust_function_creators = 1
binlog_format=mixed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
从配置文件 slave/my.cnf
[mysqld]
# 从数据库端ID号
server_id = 102
log-bin = mysql-bin
relay_log=replicas-mysql-relay-bin
log-slave-updates = 1
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误
# 指定slave要复制哪个库
binlog-do-db=mydb
# 不需要复制的数据库名
binlog-ignore-db=mysql
log_bin_trust_function_creators = 1
binlog_format=mixed
read_only=1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 步骤二
把两个my.conf文件放到对应docker的mysql/conf目录里
# 步骤三
先去主库
docker ps 查看CONTAINER ID
docker exec -itCONTAINER ID
bash 进入容器
mysql -u root -p 然后输入密码登陆
grant replication slave on . to 'root'@'从库ip
' identified by '从库密码
';
mysql 8.0如果失败就执行下面的create user 'root'@'
从库ip
' identified by '从库密码
';
grant all privileges on . to 'root'@'从库ip
' with grant option;flush privileges;更新
show master status; 拿到对应的 File和Position值 mysql-bin.000001 5042 下面从库要用
# 步骤四
再去从库进行
docker ps 查看CONTAINER ID
docker exec -itCONTAINER ID
bash 进入容器
mysql -u root -p 然后输入密码登陆
CHANGE MASTER TO MASTER_HOST='主库ip
', MASTER_USER='root', MASTER_PASSWORD='主库密码
', MASTER_LOG_FILE='主库生成的File文件名
', MASTER_LOG_POS=Position值
;
start slave; 开启同步 reset slave;重启同步出错时可删除重制
show slave status\G; 查看是否成功