首页 > 数据库 >MySQL GTID 主从复制错误修复方法

MySQL GTID 主从复制错误修复方法

时间:2023-04-20 17:13:24浏览次数:50  
标签:主从复制 rows slave none MySQL affected root GTID

MySQL 传统的主从复制方式使用 master_log_files 和 master_log_pos 两个参数来确定复制位点。当出现复制错误时,可以设置跳过出错的事务来恢复同步,MySQL 提供了 sql_slave_skip_counter 参数来实现此功能。使用方法如下:


root@(none) >stop slave;
Query OK, 0 rows affected (0.00 sec)

root@(none) >SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N;    #跳过N个事务
Query OK, 0 rows affected (0.00 sec)

root@(none) >start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

如果使用 GTID 的主从复制方式,上面这种方法并不会生效。如果有同学做过尝试,应该会收到如下报错信息。


ERROR 1858 (HY000): sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction

在 GTID 模式下使用 sql_slave_skip_counter 参数将会引发错误:

root@(none) >stop slave;
Query OK, 0 rows affected (0.00 sec)

root@(none) >set global sql_slave_skip_counter = 1;
ERROR 1858 (HY000): sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction

那使用 GTID 复制的数据库出现复制错误时该如何处理呢?其实上面的报错信息已经提示了解决方法:在发生错误的 GTID 事务号上插入一个空的事务,来实现跳过此复制错误的效果。

操作方法:


1 "show slave statusG" 找到发生复制错误的 GTID 事务号(示例只展示复制错误信息,其他信息省略),可以找到发生复制错误的 GTID 为:ab1b2733-2401-11e7-82fc-525400abbf4b:50

root@(none) >show slave status\G
*************************** 1. row ***************************
                   Last_Error: Worker 7 failed executing transaction 'ab1b2733-2401-11e7-82fc-525400abbf4b:50' at master log mysql-bin.000012, end_log_pos 156045; Could not execute Delete_rows_v1 event on table test.test2; Can't find record in 'test2', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log FIRST, end_log_pos 156045


2 向上面找到的 GTID 插入一个空的事务

stop slave;                    # 关闭 slave 复制
SET GTID_NEXT='$GTID_NO';    # 设置 GTID_NEXT 为复制出错的 GTID_NO
begin; commit;                # 向 $GTID_NO 写入空事务
SET GTID_NEXT="AUTOMATIC";    # 重新设置 GTID_NEXT 为自动获取
start slave;                # 启动 slave 复制

示例:


root@(none) >stop slave;
Query OK, 0 rows affected (0.00 sec)

root@(none) >SET GTID_NEXT='ab1b2733-2401-11e7-82fc-525400abbf4b:50';
Query OK, 0 rows affected (0.00 sec)

root@(none) >begin;
Query OK, 0 rows affected (0.00 sec)

root@(none) >commit;
Query OK, 0 rows affected (0.00 sec)

root@(none) >SET GTID_NEXT="AUTOMATIC";
Query OK, 0 rows affected (0.00 sec)

root@(none) >start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

标签:主从复制,rows,slave,none,MySQL,affected,root,GTID
From: https://www.cnblogs.com/whiteY/p/17337498.html

相关文章

  • Mysql语法
    树形结构通过节点获取节点所有上级(函数)1createfunctionget_department_list(in_idint)returnsvarchar(100)2READSSQLDATA3begin4declareidsvarchar(1000);5declaretempidint;67settempid=in_id;8whiletempid>0d......
  • MySQL使用过程中常见问题的解决
    问题1:root用户密码忘记,重置的操作、1:通过任务管理器或者服务管理,关掉mysqld(服务进程)2:通过命令行+特殊参数开启mysqldmysqld--defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini"--skip-grant-tables3:此时,mysqld服务进程已经打开。并且不需......
  • MySQL: 为什么使用 innobackupex 备份恢复搭建主从时,必须人为设置 gtid_purged 变量
    问题描述:使用innobackupex搭建主从的步骤如下:1.主库使用innobackupex备份并apply-log2.将备份文件拷贝至从库,从库清空datadir目录,并使用innobackupex进行copy-back3.从库根据备份目录中的xtrabackup_binlog_info的GTID信息来设置gtid_purged变量。4.从库changem......
  • 48 结束语 | 点线网面,一起构建MySQL知识网络
    时光流逝,这是专栏的最后一篇文章。回顾整个过程,如果用一个词来描述,就是“没料到”:我没料到文章这么难写,似乎每一篇文章都要用尽所学;我没料到评论这么精彩,以致于我花在评论区的时间并不比正文少;我没料到收获这么大,每一次被评论区的提问问到盲点,都会带着久违的兴奋去分析代码。......
  • 47 直播回顾 | 林晓斌:我的 MySQL 心路历程【无音频】
    在专栏上线后的11月21日,我来到极客时间做了一场直播,主题就是“我的MySQL心路历程”。今天,我特意将这个直播的回顾文章,放在了专栏下面,希望你可以从我这些年和MySQL打交道的经历中,找到对你有所帮助的点。这里,我先和你说一下,在这个直播中,我主要分享的内容:我和MySQL打交道的经历;......
  • MySQL常用命令
    查询所有数据库名![image]showdatabases;(https://img2023.cnblogs.com/blog/2805463/202304/2805463-20230420144431240-201364771.png)(使用哪个数据库)use[databasename];(查询数据库下的所有表名)showtables;(查询表中数据)select*from[tablename];(查询表结构)des[tab......
  • MySQL 优化
    Mysql优化总的来说就是尽量提高索引的利用率,和减少全表扫描尽量拆分查询,在程序中处理,一般不要过多连表链接查询一般都是用左小表链接右大表,看情况用左链接还是内连接利用redis进行缓存,并提高缓存命中使用explain进行检查检查索引使用情况,尽量将条件放......
  • Fedora 8下的MySQL源码安装手记
    评:系统开发计划改变!弃PostgreSQL!拥抱MySQL!当然前提是依然支持BerkeleyDB作为存储引擎的MySQL版本,5.1.12版本的MySQL已经正式将BDB从数据库引擎列表中扫地出门,虽然MySQL宣称这和Oracle收购Sleepycat没有任何关系,但是Oracle发面称是公司内部BDB开发团队要求取消支持的,所以也不太清......
  • MySQL InnoDB Architecture 简要介绍
    MySQLInnoDB存储引擎整体架构图:一、内存存储结构 1、BufferPoolbufferpool是主内存中的一块儿存储区域,用于存储访问的表及索引数据。这样从内存中直接访问获取使用的数据可以极大的提升访问效率。在一些特殊专用的服务里,几乎80%的内存区域都被赋于bufferpool。为了......
  • mysql重连,连接丢失:The Last Packet Successfully Received From the Server
    源:http://nkcoder.github.io/评:1.1错误信息:Causedby:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Thelastpacketsuccessfullyreceivedfromtheserverwas20,820,001millisecondsago.Thelastpacketsentsuccessfullytotheserverwas20,82......