赞
踩
在使用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模式切换到ROW模式时,可能会因为以下原因导致从库同步失败:
为了解决上述问题,可以按照以下步骤操作:
在切换binlog模式之前,确保主从库数据完全一致,可以通过以下方式操作:
SHOW SLAVE STATUS;
在确保数据一致后,按照以下步骤切换binlog模式:
STOP SLAVE;
SET GLOBAL binlog_format = 'ROW';
service mysql restart
START SLAVE;
如果在切换模式后依然报错,建议重建从库:
STOP SLAVE;
mysqldump -u root -p --all-databases --single-transaction --master-data > backup.sql
mysql -u root -p < backup.sql
master_log_file
和master_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;
跳过报错是以上方法都解决不了不得已使用的。
跳过指定错误代码
在从服务器,编辑 /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模式时,需要特别注意主从库的数据一致性和同步状态。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。