最初参考这篇文章来配置的:Docker Compose搭建mysql主从复制
简单记录下配置过程:
1、 配置主库my.cnf文件
[mysqld]
lower_case_table_names=1
server-id=248 # 任意数字,一般填写服务器IP后几位
log_bin=/tmp/mysql/mysql-bin
binlog-do-db=whalephp #指定要同步的数据库,不指定则同步全部
2、 配置从库my.cnf文件
[mysqld]
lower_case_table_names=1
server-id=148
log_bin=/tmp/mysql/s1-bin
sync_binlog=1
3、主库配置
# 创建用于主从复制的用户:master_repl_user
GRANT REPLICATION SLAVE ON *.* TO 'master_repl_user'@'%' IDENTIFIED BY 'repl_001';
# 刷新主库用户权限
FLUSH PRIVILEGES;
# 查看主库master状态
show master status\G
4、从库配置
#从服务器执行
stop slave;
change master to master_host='192.168.0.1',master_port=8090,master_user='master_repl_user',master_password='repl_001',master_log_file='mysql-bin.000016',master_log_pos=601;
start slave;
# 查看从库slave状态
show slave status\G
当Slave_IO_Running、Slave_SQL_Running均为YES的时候表示主从配置成功
======================================
在此过程中遇到几个问题:
1、docker-compose up过程中db配置未生效
原因:配置路径未找到
解决:在conf.d同级目录增加my.cnf配置文件并写入相关配置
[mysqld]
lower_case_table_names=1
server-id=1
log_bin=/tmp/mysql/mysql-bin
2、两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……
原因:授权密码、IP或帐号不对
排查方法:
mysql -urepl -h m1 -prepl -P8090
解决:
flush PRIVILEGES;
create user repl;
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';