MYSQL主库切换binlog模式后主从同步错误的解决方案

 更新时间:2024年08月07日 10:11:44   作者:LOVE_DDZ  
在使用FlinkSQL的mysql-cdc连接器来监听MySQL数据库时,通常需要将MySQL的binlog模式设置为ROW模式,当我们将MySQL主库的binlog模式从STATEMENT切换为ROW并重启MySQL服务后,MySQL从库在同步时可能会报错,所以本文介绍了MYSQL主库切换binlog模式后主从同步错误的解决方案

在使用FlinkSQL的mysql-cdc连接器来监听MySQL数据库时,通常需要将MySQL的binlog模式设置为ROW模式。然而,在实际项目中,可能会遇到如下问题:

当我们将MySQL主库的binlog模式从STATEMENT切换为ROW并重启MySQL服务后,MySQL从库在同步时可能会报错,错误信息如下:

Could not execute Update_rows event on table ddz.ddz_mlfl; 
Can't find record in 'ddz_mlfl', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; 
the event's master log ddzmysql-bin.002729, end_log_pos 801362189

这个错误表示在执行Update_rows事件时,找不到目标记录,具体错误代码为1032,对应的处理器错误为HA_ERR_KEY_NOT_FOUND。这是因为在切换binlog模式后,主从库之间的数据可能不一致。

错误原因分析

MySQL主库的binlog模式分为STATEMENT、ROW和MIXED三种:

  • STATEMENT模式:记录的是每一条SQL语句。
  • ROW模式:记录的是每一行数据的变更。
  • MIXED模式:结合了STATEMENT和ROW模式,通常根据具体情况自动选择。

在从STATEMENT模式切换到ROW模式时,可能会因为以下原因导致从库同步失败:

  1. 数据不一致:在切换binlog模式并重启主库后,主库和从库之间可能存在数据不一致的情况。ROW模式下,每一行的变化都会记录在binlog中,而STATEMENT模式下则只记录SQL语句的执行。因此,切换模式后,从库在应用ROW格式的binlog事件时,可能找不到相应的记录。
  2. 日志不一致:STATEMENT模式和ROW模式记录的日志格式不同,切换模式后可能会导致日志解析错误。
  3. 从库延迟:从库在同步主库的数据时,可能会出现延迟。如果在切换模式的过程中,主库进行了大量数据修改操作,从库未能及时同步,导致数据不一致。
  4. 应用binlog事件失败:从库在应用ROW格式的binlog事件时,可能因为某些原因(如主键冲突、索引问题等)而无法正确应用,从而导致找不到记录的错误。

解决方案

为了解决上述问题,可以按照以下步骤操作:

1. 确保主从库数据一致

在切换binlog模式之前,确保主从库数据完全一致,可以通过以下方式操作:

  • 停止写操作:在切换模式前,停止所有写操作,确保数据不再变化。
  • 完全同步:确保主库的所有数据已经完全同步到从库,执行以下命令检查同步状态:
SHOW SLAVE STATUS;

2. 切换binlog模式

在确保数据一致后,按照以下步骤切换binlog模式:

停止从库同步

STOP SLAVE;

切换主库binlog模式

SET GLOBAL binlog_format = 'ROW';

重启MySQL主库,以确保配置生效:

service mysql restart

启动从库同步

START SLAVE;

3. 重建从库

如果在切换模式后依然报错,建议重建从库:

停止从库

STOP SLAVE;

重新备份主库数据,并导入到从库:

mysqldump -u root -p --all-databases --single-transaction --master-data > backup.sql
mysql -u root -p < backup.sql

重新配置从库同步,确保从库的master_log_filemaster_log_pos与主库一致:

CHANGE MASTER TO MASTER_HOST='master_ip',
MASTER_USER='replication_user', 
MASTER_PASSWORD='replication_user_password',
MASTER_LOG_FILE='recorded_log_file', 
MASTER_LOG_POS=recorded_log_position;
START SLAVE;

4. 跳过异常错误

跳过报错是以上方法都解决不了不得已使用的。

跳过指定错误代码在从服务器,编辑 /etc/my.cnf:

 [mysqld]
 slave-skip-errors=1032,1033

跳过所有错误在从服务器,编辑 /etc/my.cnf:

 [mysqld]
 slave-skip-errors=all

重启mysql从库服务

service mysqld restart

总结

在使用FlinkSQL的mysql-cdc连接器监听MySQL数据库时,确保binlog模式为ROW是必要的。但在切换binlog模式时,需要特别注意主从库的数据一致性和同步状态。

以上就是MYSQL主库切换binlog模式后主从同步错误的解决方案的详细内容,更多关于MYSQL切换binlog主从同步错误的资料请关注脚本之家其它相关文章!

相关文章

  • Mysql桌面工具之SQLyog资源及激活使用方法告别黑白命令行

    Mysql桌面工具之SQLyog资源及激活使用方法告别黑白命令行

    这篇文章主要介绍了Mysql桌面工具之SQLyog资源及激活使用方法告别黑白命令行,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • mysql 8.0.17 安装与使用教程图解

    mysql 8.0.17 安装与使用教程图解

    这篇文章主要介绍了mysql 8.0.17 安装与使用教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • MySQL 不允许从远程访问的解决方法

    MySQL 不允许从远程访问的解决方法

    MySQL 不允许从远程访问的原因有很多除了下面的方法,还有需要看服务器安全设置禁止访问本机的3306端口。
    2010-03-03
  • MySQL8.0中的my.ini文件位置说明

    MySQL8.0中的my.ini文件位置说明

    这篇文章主要介绍了MySQL8.0中的my.ini文件位置说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MySQL修改root密码的多种方法(推荐)

    MySQL修改root密码的多种方法(推荐)

    本文给大家分享了三种方法来解决mysql修改root密码的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-03-03
  • mysql性能优化工具--tuner-primer使用介绍

    mysql性能优化工具--tuner-primer使用介绍

    这篇文章主要介绍了mysql性能优化工具--tuner-primer的使用方法与返回数据分析,需要的朋友可以参考下
    2016-05-05
  • 为什么mysql字段要使用NOT NULL

    为什么mysql字段要使用NOT NULL

    数据库字段一定要设置为 not null,不然会有很大的bug,下面就一起来介绍一下,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • mysql 提示INNODB错误的解决方法

    mysql 提示INNODB错误的解决方法

    解决The‘InnoDB’feature is disabled; you need MySQL built with ‘InnoDB’ to have it
    2011-09-09
  • MySQL查看日志简单易懂保姆级教程

    MySQL查看日志简单易懂保姆级教程

    这篇文章主要给大家介绍了关于MySQL查看日志简单易懂保姆级教程的相关资料,在操作MySQL数据库的时候会留下每一个步骤的痕迹,那怎么查看呢?就可以用日志去查看,需要的朋友可以参考下
    2023-08-08
  • Windows下MySQL详细安装过程及基本使用

    Windows下MySQL详细安装过程及基本使用

    本文详细讲解了Windows下MySQL安装过程及基本使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-12-12

最新评论