[MYSQL] 从库 Last_SQL_Errno: 1197 问题处理
MySQL 从库复制错误 Last_SQL_Errno: 1197 表示在从库上执行的事务与主库不一致,通常是由于事务在从库上被回滚或无法执行。以下是该问题的详细分析和解决方法。
1. 错误原因
错误 1197 的具体描述是:
ER_SLAVE_CANT_FIND_PARTITION_IN_DML
表示从库在执行主库传来的 DML 语句(如 INSERT、UPDATE、DELETE)时,无法找到对应的分区。可能的原因包括:
-
主从表结构不一致:
-
主库和从库的表结构(特别是分区定义)不同。
-
-
分区表操作问题:
-
主库上对分区表进行了操作(如
ALTER TABLE),但从库未同步这些操作。
-
-
数据不一致:
-
主库和从库的数据不一致,导致从库无法找到对应的分区。
-
2. 解决方法
(1)检查主从表结构
确保主库和从库的表结构(特别是分区定义)完全一致。
步骤:
-
在主库上查看表结构:
SHOW CREATE TABLE table_name; -
在从库上查看表结构:
SHOW CREATE TABLE table_name; -
对比两者的表结构,确保一致。
修复方法:
如果表结构不一致,手动同步表结构:
-
在从库上执行主库的
CREATE TABLE语句。 -
如果表中有数据,使用
mysqldump导出数据并导入从库。
(2)跳过错误事务
如果错误是由于某个特定事务引起的,可以跳过该事务,继续复制。
步骤:
-
停止从库复制:
STOP SLAVE; -
跳过错误事务:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;-
该命令会跳过当前错误事务。
-
-
启动从库复制:
START SLAVE;
注意:
跳过事务可能导致数据不一致,需谨慎使用。
(3)重新初始化从库
如果主从数据不一致,可以重新初始化从库。
步骤:
-
在主库上导出数据:
mysqldump -u root -p --all-databases > full_backup.sql -
在从库上停止复制并重置从库:
STOP SLAVE; RESET SLAVE ALL; -
导入数据到从库:
mysql -u root -p < full_backup.sql -
重新配置复制:
CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='主库的binlog文件', MASTER_LOG_POS=主库的binlog位置; -
启动从库复制:
START SLAVE;
(4)检查分区表操作
如果错误是由于分区表操作引起的,检查主库和从库的分区表状态。
步骤:
-
在主库上检查分区表状态:
SELECT * FROM information_schema.PARTITIONS WHERE TABLE_NAME = 'table_name'; -
在从库上检查分区表状态:
SELECT * FROM information_schema.PARTITIONS WHERE TABLE_NAME = 'table_name'; -
对比两者的分区表状态,确保一致。
修复方法:
如果分区表状态不一致,手动同步分区表:
-
在主库上执行
ALTER TABLE语句。 -
在从库上执行相同的
ALTER TABLE语句。
(5)检查数据一致性
使用工具检查主从数据一致性,如 pt-table-checksum 和 pt-table-sync。
步骤:
-
在主库上运行
pt-table-checksum:pt-table-checksum --databases=database_name --tables=table_name -
在从库上检查校验和:
SELECT * FROM percona.checksums; -
使用
pt-table-sync修复不一致的数据:pt-table-sync --execute h=主库IP,D=database_name,t=table_name h=从库IP
3. 预防措施
-
定期检查主从表结构:
-
确保主库和从库的表结构一致。
-
-
避免直接操作从库:
-
不要在从库上直接修改数据或表结构。
-
-
监控复制状态:
-
定期检查
SHOW SLAVE STATUS,及时发现并处理复制错误。
-
-
使用自动化工具:
-
使用
pt-table-checksum和pt-table-sync定期检查并修复数据一致性。
-
4. 总结
错误 1197 通常是由于主从表结构不一致或数据不一致引起的。解决方法包括:
-
检查并同步主从表结构。
-
跳过错误事务(谨慎使用)。
-
重新初始化从库。
-
检查并修复分区表操作。
-
使用工具检查并修复数据一致性。
通过合理配置和监控,可以有效避免该错误的发生,确保 MySQL 主从复制的稳定性。
浙公网安备 33010602011771号