MySQL常见问题以及解决方法

MySQL常见问题以及解决方法

  1. 数据损坏或丢失
  2. serverid不唯一
  3. 主从节点存在复制延迟
  4. 主从节点数据不一致
  5. 数据表主键冲突
数据损坏或丢失
  • Master:采用MHA+semisync replication的方式解决
  • Slave:重新复制
serverid不唯一

重新复制

主从节点存在复制延迟:

通过需要额外的监控工具的辅助

主从节点数据不一致:

通过手动备份数据不一致的表来实现数据的同步。在从库发现某几张表与主库数据不一致,而这几张表数据量也比较大,手工比对数据不现实,并且重做整个库也比较慢,这个时候可以只重做这几张表来修复主从不一致
注意:在执行导入期间需要暂时停止从库复制

范例:A,B,C这三张表主从数据不一致
1、从库停止Slave复制
mysql>stop slave;

2、在主库上dump这三张表,并记录下同步的binlog和POS点
mysqldump -uroot -pmagedu -q --single-transaction --master-data=2 testdb A B C >/backup/A_B_C.sql

3、查看A_B_C.sql文件,找出记录的binlog和POS点
head A_B_C.sql
例如:MASTERLOGFILE='mysql-bin.888888', MASTERLOGPOS=666666;
#以下指令是为了保障其他表的数据不丢失,一直同步直到那个点结束,A,B,C表的数据在之前的备份已经生成了一份快照,只需要导入进入,然后开启同步即可

4、把A_B_C.sql拷贝到Slave机器上,并做指向新位置
mysql>start slave until MASTERLOGFILE='mysql-bin.888888', MASTERLOGPOS=666666; 5、在Slave机器上导入A_B_C.sql

mysql -uroot -predhat testdb

mysql>set sql_log_bin=0;

mysql>source /backup/A_B_C.sql

mysql>set sql_log_bin=1; 6、导入完毕后,从库开启同步即可。

mysql>start slave;
START SLAVE UNTIL:将数据同步到指定二进制日志的指定位置

例如:START SLAVE UNTIL MASTER_LOG_FILE='上一步中服务器B日志名称', MASTER_LOG_POS=上一步中服务器B日志位置;

表示将使用 START SLAVE UNTIL 语句将数据同步到服务器B的日志位置:
造成数据不一致的原因:
  1. 二进制日志格式问题:Master的二进制日志格式为Statement,同步到从库执行后可能造成主从不一致
  2. master关闭二进制日志:主库执行更改前有执行set sql_log_bin=0,会使主库不记录binlog,从库也无法变更这部分数据
  3. 从节点未设置只读,误操作写入数据
  4. 主库或从库意外宕机,宕机可能会造成binlog或者relaylog文件出现损坏,导致主从不一致
  5. 主从实例版本不一致,特别是高版本是主,低版本为从的情况下,主数据库上面支持的功能,从数据库上面可能不支持该功能
  6. MySQL自身bug导致
如何避免主从不一致
  1. 主库binlog采用ROW格式
  2. 主从实例数据库版本保持一致
  3. 主库做好账号权限把控,不可以执行set sql_log_bin=0
  4. 从库开启只读,不允许人为写入
  5. 定期进行主从一致性检验

Original: https://www.cnblogs.com/heyongshen/p/16732621.html
Author: 背对背依靠
Title: MySQL常见问题以及解决方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578570/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球