前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一则mysql主从不同步问题分析

一则mysql主从不同步问题分析

作者头像
山行AI
发布2019-07-19 19:12:16
1.3K0
发布2019-07-19 19:12:16
举报
文章被收录于专栏:山行AI山行AI

开发环境出现了主从不同步,在slave节点上显示的SlaveIORunning: Connecting,SlaveSQLRunning: Yes,导致有些查询出现不一致的情况

问题分析

一般这种问题出现的原因主要有以下五点:

  1. 主库机器和从库机器网络不通 可以互ping的方式来查
  2. 密码不对 mysql -uroot -p 以对应的用户名和密码登录master mysql server重新对slave授权来排查,具体授权方式见下文。
  3. master和slave的pos不正确
  • 在master机器上mysql -uroot -p 登录,然后执行show master status \G; 查看pos和binXX.log的情况;
  • 在slave机器上mysql -uroot -p 登录,然后执行show slave status \G; 查看pos和binXX.log的情况;
  • 比对两者的pos和binXX.log的情况
  1. 有防火墙(以下命令针对centos7)
  • firewall-cmd --state 查看状态
  • systemctl stop firewalld.service 停止防火墙
  • systemctl disable firewalld.service 禁止防火墙开机启动
  1. server.id的问题 分别在两台机器上cat /etc/my.cnf查看server.id的值,如果相同则改成不同即可

具体问题

  1. master和slave上的pos与bin.log对应不上,slave 上的比起master要延后很多。master的截图如下:
  1. 先执行stop slave,然后执行CHANGE MASTER TO -> MASTERHOST='master host', -> MASTERUSER='host111', -> MASTERPASSWORD='Aa&12345', -> MASTERLOGFILE='bin.000094', -> MASTERLOGPOS= 530876999; 再start slave之后在slave上show slave status \G;仍然SlaveIO_Running: Connecting。
  2. 从上面两点开始怀疑是不是用户权限的问题,于是到master mysql控制台操作:
mysql> grant all privileges on *.* to host112@"slave host" identified by "Aa&12345" with grant option;Query OK, 0 rows affected, 1 warning (0.00 sec)

注意这里如果想权限粒度更小可以对复制操作的用户授予REPLICATION SLAVE权限:

mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO host112@'slave host' IDENTIFIED BY ‘Aa&12345';

然后flush一下:

mysql> flush privileges;Query OK, 0 rows affected (0.01 sec)
  1. 上面授权成功后,先执行stop slave,然后执行:CHANGE MASTER TO -> MASTERHOST='master host', -> MASTERUSER='host112', -> MASTERPASSWORD='Aa&12345', -> MASTERLOGFILE='bin.000094', -> MASTERLOG_POS= 530876999;
  2. 执行start slave 之后show slave status \G;SlaveIORunning: Yes,SlaveSQLRunning: Yes,成功。
  3. 在这过程中如果需要重置slave,可以删除master.info和slaverelaylog_info,然后在slave上执行:
    mysql> stop slave;

    Query OK, 0 rows affected (0.01 sec)

    mysql> reset slave;

    Query OK, 0 rows affected (0.01 sec)

    mysql> CHANGE MASTER TO

        -> MASTER_HOST='master host', 

        -> MASTER_USER='host112', 

        -> MASTER_PASSWORD='Aa&12345', 

        -> MASTER_LOG_FILE='bin.000094', 

        -> MASTER_LOG_POS= 530876999;

    Query OK, 0 rows affected, 2 warnings (0.01 sec)

    mysql> start slave;

    Query OK, 0 rows affected (0.01 sec)

再查询从库状态 看到 SlaveIORunning: Yes SlaveSQLRunning: Yes

总结

  • 一般情况下出现主从不一致要从上面几个方面排查。
  • 压力测试通过时业务上有些重要的查询可以强制走主库。
  • 如果上述方法都解决不了问题,建议dump一份数据文件,对master和slave都进行reset,这或许是没有办法的办法。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题分析
  • 具体问题
  • 总结
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档