MySQL Replication--跳过复制错误
在MySQL中,有两种跳过复制错误的方法:
1、对于未使用GTID的复制,可以使用sql_slave_skip_counter来跳过错误
2、对于使用GTID的复制,可以使用GTID_NEXT模拟空事务来跳过错误
================================================
使用sql_slave_skip_counter跳过错误
对于set global sql_slave_skip_counter=N
1>N代表N个event
2>当N=1时,代表跳过下一个事务,无论下一个事务包含多少event
3>当N>1时,代表启动复制后,从当前位置跳过N个event,每跳过一个event,进行N--操作,如果最终跳到一个事务中,则跳过该事务进行复制。
在binlog中上命令以event的形式存在,但由于存储引擎和binlog日志格式的不同,一条命令可能被解析成一个或N个event。
如对于Innodb存储引擎+STATEMENT日志格式,由于支持事务,会有begin和commit事件。
而对于MyISAM存储引擎+STATEMENT日志格式,由于不考虑事务,则不会有begin和commit事件。
## 停止slave进程
STOP SLAVE; ## 跳过N个复制事件
set global sql_slave_skip_counter=N ## 启动slave进程
START SLAVE; ## 查看复制进度
SHOW SLAVE STATUS \G
================================================
使用GTID_NEXT模拟空事务跳过错误
对于使用GTID复制,当在从库上执行主库传递过来的BINLOG时,会先判断根据GTID该事务是否已在从库上执行过。
可以通过在从库上模拟生成空事务,来跳过主库传递来的事务,从而跳过错误。
## 停止slave进程
STOP SLAVE; ## 使用空事务跳过指定GTID
SET GTID_NEXT= 'e0a86c29-f20d-11e8-93c2-04b0e7954a65:104934';
BEGIN; COMMIT; ## 设置GTID自动增长
SET SESSION GTID_NEXT = AUTOMATIC; ## 启动slave进程
START SLAVE; ## 查看复制进度
SHOW SLAVE STATUS \G
如果需要跳过一批GTID,可以使用下面脚本来生成脚本:
import os script_file = "./skip_file.sql" def write_script(script_content):
file_handle = open(script_file, 'a+')
file_handle.writelines(script_content + "\n")
file_handle.close() def delete_script_file():
if os.path.exists(script_file):
os.remove(script_file) def get_skip_script_list(master_uuid, start_tran_id, end_tran_id):
script_list = []
current_tran_id = start_tran_id
while current_tran_id <= end_tran_id:
current_script = """
SET @@SESSION.GTID_NEXT= '{master_uuid}:{tran_id}';
BEGIN; COMMIT;
""".format(
master_uuid=master_uuid,
tran_id=current_tran_id
)
current_tran_id = current_tran_id + 1
script_list.append(current_script)
script_list.append("SET SESSION GTID_NEXT = AUTOMATIC;")
return script_list def main():
master_uuid = "e0a86c29-f20d-11e8-93c2-04b0e7954a65"
start_tran_id = 104935
end_tran_id = 105007
script_list = get_skip_script_list(master_uuid, start_tran_id, end_tran_id)
write_script("\n".join(script_list)) if __name__ == '__main__':
main()
生成结果如下:
SET @@SESSION.GTID_NEXT= 'e0a86c29-f20d-11e8-93c2-04b0e7954a65:104935';
BEGIN; COMMIT;
...
SET @@SESSION.GTID_NEXT= 'e0a86c29-f20d-11e8-93c2-04b0e7954a65:105007';
BEGIN; COMMIT; SET SESSION GTID_NEXT = AUTOMATIC;
PS: 跳过事务后一定要执行命令“SET SESSION GTID_NEXT = AUTOMATIC”
MySQL Replication--跳过复制错误的更多相关文章
- mysql主从复制跳过复制错误【转】
跳过复制错误 mysql因为binlog机制问题,有些时候会出现从库重放sql执行失败的情况,特别是旧的STATEMENT模式最容易出现这种情况(因为函数和存储过程等原因),这也是为什么强调使用mix ...
- 跳过复制错误——sql_slave_skip_counter
昨天不少同学讨论<小心,前方有雷 —— sql_slave_skip_counter>,有说作者在玩文字游戏,扯了那么多sql_slave_skip_counter=1不还是跳过一个事务嘛 ...
- MySQL-Utilities:mysqldbcompare及跳过复制错误
mysqldbcompare也是MySQL-Utilities工具集的一个脚本.mysqldbcompare从两个数据库比较对象和数据的不同.数据库中的对象包括:表.视图.触发器.存储过程.函数和事件 ...
- 跳过复制错误——slave_skip_errors、slave_exec_mode
这一篇写写复制错误处理相关的另两个参数slave_skip_errors.slave_exec_mode,基本环境参考<复制错误处理——sql_slave_skip_counter> 一. ...
- MySQL Replication主从复制
MySQL Replication:NySQL复制,MySQL的复制默认为异步工作模式 mysql的复制功能是mysql内置的,装上它之后就具备了这个功能,而mysql复制是mysql实现大规模高 ...
- mysql 5.6在gtid复制模式下复制错误,如何跳过??
mysql 5.6在gtid复制模式下复制错误,如何跳过?? http://www.xuchanggang.cn/archives/918.html
- MySQL复制错误 The slave I/O thread stopsbecause master and slave have equal MySQL server UUIDs; these UUIDs must bedifferent for replication to work 解析
在搭建Mysql主从复制时候,在执行完相关操作以后,通过命令查看是否主从复制成功的时候 show slave status\G; 在"Slave_SQL_Running_State" ...
- mysql replication常见错误整理
这篇文章旨在记录MySQL Replication的常见错误,包括自己工作中遇到的与网友在工作中遇到的,方面自己及别人以后进行查找.每个案例都是通过Last_IO_Errno/Last_IO_Erro ...
- mysql replication错误常见处理
大部分的错误,都是日志错误 日志本身的错误 主日志和中继日志都可能出错,可以使用mysqlbinlog来读一下mysqlbinlog mysql-bin.000007>/dev/null ##只 ...
随机推荐
- HashMap实现原理分析--面试详谈
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...
- python中的__call__()函数
__call__ 在Python中,函数其实是一个对象: >>> f = abs >>> f.__name__ 'abs' >>> f(-123) ...
- fk makefile文件的一些问题
除了要按具神说的makefile修改之外,还发现了另外一个问题: 不然就改成SACLIB=-L/usr/local/sac/lib
- 2018-2019-2 20175224 实验三《敏捷开发与XP实验》实验报告
一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:艾星言 学号:20175224 指导教师:娄嘉鹏 实验日期:2019年4月29日 实验时间:13:45 - 15:25 实验序号:24 ...
- 第一个python程序--hello,world
Hello World程序 在linux 下创建一个文件叫hello.py,并输入 print ('hello,word') 然后执行:python3 hello.py ,输出: [root@IDC- ...
- nginx统计模块——ngx_http_stub_status_module
今天呢给大家分享一个nginx的统计模块的使用,这个模快我们是经常的使用呢,在我们对nginx最优化,调优的时候我们就需要借助这个模块去分析nginx的性能. 下面我们来看看这个模块的语法格式, 这个 ...
- springsecurity启动出现org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: You must use a 3.0 schema with Spring Security 3.0.
在换了spring-security的jar包以后启动出现org.springframework.beans.factory.parsing.BeanDefinitionParsingExceptio ...
- debian镜像下载地址
http://cdimage.debian.org/debian-cd/9.8.0-live/amd64/iso-hybrid/
- TCP/IP协议的四个层及作用
- CSS3一个酷炫的加载效果
上效果图,用截屏工具制作的,看起来有点卡,在网页上面显示还是不错的. CSS代码: <style type="text/css"> .loader{ position: ...