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 ##只 ...
随机推荐
- 协程(Coroutine)与多线程,多进程
执行多个任务可以使用多线程或多进程. 多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响 多线程中,所有变量都由所有线程共享.而线程间的切换是系统进行调度,无法控制,所以可能 一个进程中的 ...
- HDU 2063 (二分图最大匹配)
RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每个女孩 ...
- marquee 的浏览器兼容性
marquee 在IE,firefox,chrome ,safari下都能正常的实现走马灯效果,兼容性没有问题 并且两个关键属性scrollamount(滚动速度)direction(滚动方向) 所有 ...
- <Google><APAC><kickstart><2017.05.07><2017RoundB>
Google APAC kickstart 网址链接 我的所有solution代码和文件请点击 前言 这个比赛的题怎一个变态了得,虽然是第一次参赛,抱着熟悉流程的心态去的,但仍然被虐得一颤一颤的╮(╯ ...
- L291
If you are currently in the midst of planning a wedding, then I don't need to tell you how stressful ...
- http 请求头部解析
作者:知乎用户链接:https://www.zhihu.com/question/42696895/answer/109035792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- 2019-04-09-day028-OSI七层模型
内容回顾 概念 架构 : B/S C/S 硬件 : 网卡 :在计算机中 帮助我们完成网络通信 交换机 :在局域网内多台机器之间通信 路由器 :多个局域网之间的机器之间的通信 局域网 :一个区域内的多台 ...
- Oracal
增删改查 1.增加数据表 Create table users ( userid VARCHAR2(4), username VARCHAR2(20), userpass VARCHAR2(20), ...
- JAVA_全局配置文件(配置网址,url等等)_第二种方式
@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中 1.application-local.yml 配置文件 2.Service 3. ...
- MySQL笔记(2)
SQL 的约束 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.. 1 约束分类 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. ...