mysql怎么查看主从复制数据是否一致_MYSQL主从复制不一致

主从不同步的情况

1.网络延迟

由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。

2.主从两台机器的负载不一致,由于mysql主从复制是主数据库上面启动1个io线程,而从上面启动1个sql线程和1个io线程,当中任何一台机器的负载很高,忙不过来,导致其中的任何一个线程出现资源不足,都将出现主从不一致的情况。

3.max_allowed_packet设置不一致,主数据库上面设置的max_allowed_packet比从数据库大,当一个大的sql语句,能在主数据库上面执行完毕,从数据库上面设置过小,无法执行,导致的主从不一致。

4.自增键不一致,key自增键开始的键值跟自增步长设置不一致引起的主从不一致。

5.同步参数设置问题,mysql异常宕机情况下,如果未设置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出现binlog或者relaylog文件出现损坏,导致主从不一致。

6.主库binlog格式未Statement,同步到从库执行后可能造成主从不一致。

7.主库执行更改前有执行set sql_log_bin=0,会使主库不记录binlog,从库也无法变更这部分数据。

8.从节点未设置只读,误操作写入数据。

9.主库或从库意外宕机,宕机可能会造成binlog或者relaylog文件出现损坏,导致主从不一致

10.主从实例版本不一致,特别是高版本是主,低版本是从的情况下,主数据库上面支持的功能从数据库上面可能不支持

11.MYSQL自身bug导致

主从不一致查看

主库上查看是否有太多sleep线程, 发现线程正常

mysql>show processlist;+----+----------+------------------+------+------------------+------+-----------------------------------------------------------------------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+----------+------------------+------+------------------+------+-----------------------------------------------------------------------+------------------+

| 1 | repluser | 10.0.0.216:48640 | NULL | Binlog Dump GTID | 3595 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL |

| 3 | root | localhost | NULL | Query | 0 | init | show processlist |

+----+----------+------------------+------+------------------+------+-----------------------------------------------------------------------+------------------+

2 rows in set (0.00 sec)

查看主库,状态也正常

mysql>show master logs;+----------------------+-----------+

| Log_name | File_size |

+----------------------+-----------+

| localhost-bin.000001 | 9839 |

+----------------------+-----------+

1 row in set (0.00 sec)

由此可见是从库的问题

从库解决方法1:重新实现从库

主库数据量较大的话,这个方法恢复时间比较慢,而且有时候从库也承担一部分的查询操作,不能贸然重建。

从库解决方法2:使用percona-toolkit工具辅助

从库解决方法3:手动重建不一致的表

在从库发现某几张与主库数据不一致,而这几张表数据量也比较大,手工对比数据不现实,重做整个库也比较慢,这个时候可以只重做这几张表来修复主从不一致

这个方案缺点是在执行导入期间需要暂时停止从库复制

实现思路:

假设A,B,C这三张表主从数据不一致

1.停止从库复制

2.在主库上dump这三张表,并且记录下同步的binlog和POS点

3.查看A_B_C.sql文件,找出记录的binlog和POS点

4.把A_B_C.sql拷贝到slave机器上,并做指定复制到的位置

你可能感兴趣的:(mysql怎么查看主从复制数据是否一致_MYSQL主从复制不一致)