GTID跳过SQL错误的脚本

简介: 点击(此处)折叠或打开 #!/bin/bash #Author:wwa USER= PWD= ...

点击(此处)折叠或打开

  1. #!/bin/bash
  2. #Author:wwa
  3. USER=
  4. PWD=
  5. HOST=
  6. PORT=
  7. REP=
  8. REPPWD=
  9. REPH=
  10. REPP=
  11. GTID=$2
  12. GTID_START=$3
  13. GTID_END=$4
  14. GTID_PURGE(){
  15. echo "GTID_UUID:$GTID, GTID_START:$GTID_START, GTID_END=%GTID_END"
  16. mysql -u$USER -p$PWD -h$HOST -P$PORT -e "stop slave;reset slave;reset master;set global gtid_purged='$GTID:$GTID_START-$GTID_END';CHANGE MASTER TO MASTER_HOST='$REPH', MASTER_PORT=$REPP, MASTER_USER='$REP',MASTER_PASSWORD='$REPPWD', master_auto_position=1;start slave;"
  17. sleep 1
  18. mysql -u$USER -p$PWD -h$HOST -P$PORT -e "show slave status\G;"
  19. }
  20. GTID_SKIP(){
  21. mysql -u$USER -p$PWD -h$HOST -P$PORT -e "stop slave;set session gtid_next='$GTID:$GTID_START';begin;commit;set session gtid_next="AUTOMATIC";start slave;"
  22. }

  23. case "$1" in
  24. GTID_PURGE)
  25. echo "Start GTID_PURGE, transaction in $GTID between $GTID_START-$GTID_END will be skipped......"
  26. GTID_PURGE
  27. echo "GTID_PURGE success......"
  28. ;;
  29. GTID_SKIP)
  30. echo "Start GTID_SKIP, transaction $GTID:$GTID_START will be skipped......"
  31. GTID_SKIP
  32. echo "GTID_SKIP success......"
  33. ;;
  34. *)
  35. echo $"Usage: $0 {GTID_PURGE args1 args2 args3|GTID_SKIP args1 args2}"
  36. exit 1
  37. ;;
  38. esac
使用简介

GTID_PURGE() 当同步 发生大量的错误时,使用flush table with read lock锁住主库, 记录GTID的事务编号(最后那个,例如后面示例里面的142787),然后数据同步到从库,在参数中加上 UUID(空格)起始事务编号 (空格) 中止事务编号
原理:purge掉master log中,同步数据的SCN之前的事务,从同步时间点以后开始读取binlog; 这样做的好处是不用去master操作,清理binlog(手抖清理了其他东西就不好了~)

GTID_SKIP()发生少量的错误时,使用show slave status\G;找到UUID和出错的事务编号,参数中加上  UUID(空格)事务编号
原理:生成一个空事务来跳过原本出错的事务,然后继续往下同步

关于 如何判断 GTID_SKIP()需要跳过的事务编号
假设出错时,slave status是这个样子,

箭头所指的代表从主库拉去的日志中,包含哪些事务(以编号的形式);
方框所指的代表从库现在执行了哪些事务;这里的意思就是从库已经执行了编号1到编号139595的事务
如果出错了,说明139596事务出错了,这时候执行脚本里的事务编号写 上139596就行

实际使用效果如图(截图时间截晚了,事务ID对不上,不过意思表达清楚了就好~)


结语: 任何发生于数据库上的操作一定要三思而后回车,血的教训数不胜数,所以验证无误的固定操作,用脚本来实现是个不错的选择。
目录
相关文章
|
2月前
|
SQL 测试技术 数据库
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
|
5月前
|
SQL 数据库
PowerDesigner导出SQL脚本运行注释出现乱码问题
PowerDesigner导出SQL脚本运行注释出现乱码问题
112 0
|
8月前
|
SQL
利用Ant 执行SQL 脚本
利用 Ant 的SQL Task来实现执行SQL 脚本的功能
132 0
|
9月前
|
SQL 数据库
PowerDesigner16(PDM)pd生成数据库sql脚本
今天使用PowerDesigner16软件生成数据库脚本的时候遇到了一些问题,但是经过不懈努力最终修成正果,下面将小编的经历以及错误解决方案与大家分享。
|
5月前
|
SQL 关系型数据库 MySQL
MySql数据库中的视图,索引与数据库sql脚本如何导入与导出---(详细介绍)
MySql数据库中的视图,索引与数据库sql脚本如何导入与导出---(详细介绍)
243 0
|
SQL 数据库
使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本并生成表在数据库
使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本并生成表在数据库
421 0
使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本并生成表在数据库
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
33 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
103 0
|
4月前
|
SQL 关系型数据库 Shell
postgresql|数据库|批量执行SQL脚本文件的shell脚本
postgresql|数据库|批量执行SQL脚本文件的shell脚本
122 0
|
11月前
|
SQL 关系型数据库 Linux
Postgres SQL 做备份脚本批处理
每次手动备份太麻烦了,工作上需要,决定使用自动备份,所以写个博客来记录一次,本次备份功能是无密码通过批处理来执行定时备份的,如果是windows server r2服务器的话大家可以搭配任务计划程序来做定时执行,如果是linux内核的系统可以用crontab插件,crontab 插件大家可以自行百度,从而形成定时备份数据。
122 0