主从同步数据异常,如何跳过错误?
发布时间:2023-09-07 12:41:56 所属栏目:MySql教程 来源:
导读:由于种种原因,有时候从库可能会出现因主从数据导致的无法执行的 sql 语句,那么此时就要跳过该sql 语句了。
1.1 binlog+position 模式
-- 在从库上操作
) 跳过错误报错
MysqL> stop slave;
MysqL> set glo
1.1 binlog+position 模式
-- 在从库上操作
) 跳过错误报错
MysqL> stop slave;
MysqL> set glo
由于种种原因,有时候从库可能会出现因主从数据导致的无法执行的 sql 语句,那么此时就要跳过该sql 语句了。 1.1 binlog+position 模式 -- 在从库上操作 ) 跳过错误报错 MysqL> stop slave; MysqL> set global sql_slave_skip_counter =; MysqL> start slave; ) 查看同步状态 MysqL> show slave status\G 1.2 GTID 模式 方法一:直接跳过错误: -- 在从库上操作 ) 停止slave进程 MysqL> STOP SLAVE; ) 设置事务号,事务号从Executed_Gtid_Set获取,在session里设置gtid_next,即跳过这个GTID 如从show slave status拿到Executed_Gtid_Set为xxxx:- MysqL> SET @@SESSION.GTID_NEXT= 'xxxx:5' ) 设置空事物 MysqL> BEGIN; COMMIT; ) 恢复事物号 MysqL> SET SESSION GTID_NEXT = AUTOMATIC; ) 启动slave进程 MysqL> START SLAVE; 方法二:重置master方法跳过错误 -- 在从库上操作 -- 如从show slave status拿到Executed_Gtid_Set为xxxx:1-4,以下命令表示,忽略xxxx:1-5这个GTID事务,下一次事务接着从 6 这个GTID开始,即可跳过上述错误。 ) 停止slave进程 MysqL> STOP SLAVE; ) 重置MASTER MysqL> RESET MASTER; ) 设置GTID_PURGED MysqL> SET @@GLOBAL.GTID_PURGED ='xxxx:1-5'; ) 启动slave进程 MysqL> START SLAVE; 2. 如何清理表碎片 当某张表删除完大量数据,或 MysqL 运行很长时间(一般指半年)后,难免会产生表碎片,这时就要对表进行碎片清理。 ) 查询表碎片大小(一般碎片率超过%,可以考虑清理表碎片) MysqL> select t.table_name, t.table_schema, t.ENGINE, t.TABLE_ROWS, ROUND(t.DATA_LENGTH//,) DATA_LENGTH_MB, ROUND(t.INDEX_LENGTH//,) INDEX_LENGTH_MB, ROUND((t.DATA_LENGTH+t.INDEX_LENGTH)//,) SUM_LENGTH_MB, ROUND(t.DATA_FREE//,) DATA_FREE_MB, CONCAT(ROUND((t.DATA_FREE / (t.DATA_LENGTH + t.INDEX_LENGTH + t.DATA_FREE)) * ,),'%') FRAGMENT_RATE from information_schema.tables t where = and t.DATA_FREE != and (t.DATA_FREE / (t.DATA_LENGTH + t.INDEX_LENGTH + t.DATA_FREE)) >= -- 碎片率超过30% and t.TABLE_ROWS >= and ROUND(t.DATA_FREE//,) >= order by t.DATA_FREE / t.DATA_LENGTH desc ) 清理表碎片 -- MyISAM存储引擎 MysqL> OPTIMIZE TABLE tbl_name -- Innodb存储引擎 MysqL> ALTER TABLE tbl_name ENGINE = Innodb; (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |