最近研究做docker跑mysql容器 并且配置mysql主从同步。
配置文件相关配置如下
主库和从库的 my.cnf 文件要做修改
主库:
server-id=10
log-bin=mysql-bin
从库:
server-id=11
打开配置文件添加在最后一行即可,重启mysql服务
大家的my.cnf 文件路径不一致,不知道的找一找吧
我的mysql配置是docker 指定的路径。
数据库相关配置如下
一 .主库相关配置
1.master创建一个用于binlog同步日志的用户.
CREATE USER ‘slave’@’%’ IDENTIFIED BY ‘123456’;.
2.给用户授相关同步权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘slave’@’%’;
3.查看主库binlog日志当前文件及位置
SHOW MASTER STATUS ;
二 从库相关配置
1.配置连接主库的相关信息
CHANGE MASTER TO MASTER_HOST=’数据库ip’,MASTER_PORT=3307,MASTER_USER=’slave’,MASTER_PASSWORD=’123456′,MASTER_LOG_FILE=’mysql-bin.000010′,MASTER_LOG_POS=154;
2.启动同步进程
START SLAVE
3.查看状态
show PROCESSLIST
如下图表示成功
4.连接主库查看主库状态
show PROCESSLIST
如下图表示成功
5 最后链接从库查看连接主库的状态 如下图标识连接成功 。
show slave status
以上是最终成功的栗子。
下面是我配置出现的问题:
1.启动salve
start slave
2. 查看同步状态如下图: Slave_IO_Running是conneting 标识还在连接当中。也就是没连接上master主库
3.看了docker mysql容器日志,最终排查是因为 端口受限访问不了
4 然后就去看了下防火墙确实是因为防火墙没有开放 主库的 3306 端口导致从库连接不了,开放端口记得重启防火墙
以下是 Centos7 防火墙的基本命令
1 firewall-cmd –zone=public –add-port=3306/tcp –permanent 开放3306端口()
#下面3行是参数说明
#–zone #作用域
#–add-port=80/tcp #添加端口,格式为:端口/通讯协议
#–permanent #永久生效,没有此参数重启后失效
#重启防火墙后看看是否生效
2 firewall-cmd –reload #重启firewall
3 firewall-cmd –list-ports #查看已经开放的端口
#如果想永久停止防火墙,执行下面操作
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
#查看防火墙状态
firewall-cmd –state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)