码迷,mamicode.com
首页 > 数据库 > 详细

Repair MySQL 5.6 GTID replication by injecting empty transactions

时间:2015-12-02 01:05:23      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:mysql   faq   replication   gtid   


在前面文章我提到了两种关于如何修复 Mysql 5.6 GTID 主从数据库
我没有提到大家说熟知的方法 - ` GLOBAL SQL_SLAVE_SKIP_COUNTER = n`。原因很简单,如果你使用的是MysqlGTID,它是不工作的。
那么问题来了:


有没有简单的方法跳过这单一事务 ?
是的!注入空事务。让我们想象一下,从服务器上的复制不工作,因为下面一个错误:

Last_SQL_Error: Error ‘Duplicate entry ‘4‘ for key ‘PRIMARY‘‘ on query. Default database: ‘test‘. Query: ‘insert into t VALUES(NULL,‘salazar‘)‘
Retrieved_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
Executed_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-4


这里有不同的方法可以找到失败的事务。你可以检查二进制日志,或者你也可以检查retrieved_gtid_set executed_gtid_set 从显示输出的例子中我们可以看出。此从服务器检索到1到5的交易,但只执行了1到4。这意味着交易5是导致问题的一个问题。

因为在GTID中sql_slave_skip_counter不工作,我们需要找到一种办法来忽视事务。我们可以在GTID中创建空事务以跳过它。

STOP SLAVE;
SET GTID_NEXT="7d72f9b4-8577-11e2-a3d7-080027635ef5:5";
BEGIN; COMMIT;
SET GTID_NEXT="AUTOMATIC";
START SLAVE;
[...]
Retrieved_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
Executed_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5


START SLAVE 之后 检查事务5已经在它自己的二进制文件中了,这就意味着它已经执行过了。

这是一个简单的方法来跳过一些事务,但是,你应该想到主从服务器之间数据不一致。pt-table-checksum 在这里可以帮助你,它可以在Percona Toolkit for mysql 中找到。

上周我谈及了很多关于GTID的东西在多伦多 Percona Mysql 大学。 它包括MySQL 5.6 gtid 这个新功能的工作概述,可以帮助人们。这是来自该会议的幻灯片。我希望你觉得它有用:MySQL 5.6 GTID in a nutshell


原文: https://www.percona.com/blog/2013/03/26/repair-mysql-5-6-gtid-replication-by-injecting-empty-transactions/

本文出自 “Jeffrey Blog” 博客,请务必保留此出处http://oceanszf.blog.51cto.com/6268931/1718689

Repair MySQL 5.6 GTID replication by injecting empty transactions

标签:mysql   faq   replication   gtid   

原文地址:http://oceanszf.blog.51cto.com/6268931/1718689

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!