设为首页 收藏本站
查看: 774|回复: 0

[经验分享] MySQL5.7 GTID与传统快速切换

[复制链接]

尚未签到

发表于 2018-9-27 09:24:58 | 显示全部楼层 |阅读模式
  当前场景:
  某些业务场景还未开启GTID服务组,在最新版本中,BINLOG组提交也基于GTID方式,因此如何检测是否符合开启GTID条件,在线切换使用GTID,以及如何快速回滚:
  gtid_mode参数新选项:MySQL提供两个额外的选项off_permissive和on_permissive
  gtid-mode的几种状态说明:
  off :不产生gtid,基于binlog+position,slave也不能接受gtid的日志;
  off_permissive:不产生gtid,但做为slave可以识别gtid事务也可以识别非gtid事务;
  on_permissive:产生gtid事务,slave可以处理gtid事务和非gtid事务;
  on:产生gtid事务,slave只接受gtid事务
GTID三个限制
  enforce-gtid-consistency=ON时,以下三类语句时不支持的

  •   CREATE TABLE ... SELECT statements
  •   CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements inside transactions
  •   Transactions or statements that update both transactional and nontransactional tables. There is an exception that nontransactional DML is allowed in the same transaction or in the same statement as transactional DML, if all nontransactional tables are temporary.
  而实际上这个限制没有必要这么严格,

  •   CREATE TABLE ... SELECT statements
      对于binlog_format=row, gtid_next='automatic'时可以放开限制。
      生成的binlog包含两个GTID, 一个是建表语句,一个是包含多个insert的事务。
  •   事务中包含事务表和非事务表
      对于gtid_next='automatic'时可以放开限制。
      生成的binlog包含两个GTID, 一个是所有非事务表的,一个是所有事务表的。
      对update多表(包含事务表和非事务表)此时需额外要求binlog_format=row。
  在线开启GTID过程如下:
  ① 所有的server上执行
  set @@global.enforce_gtid_consistency = warn; 特别注意: 这一步是关建的一步使用不能出现警告。会将不符合的语句记入错误日志
  ② 所有的server上执行:
  set @@global.enforce_gtid_consistency = on;
  ③ 所有的Server上执行(不关心最先最后,但要执行完):
  set @@global.gtid_mode = off_permissive;
  ④ 所有的server上执行:
  set @@global.gtid_mode=on_permissive;
  实质在这一步骤生成的日志都是带GTID的日志了,这个步骤号称是不关心任何节点,但从实际管理上推荐在slave上先执行,然后再去master上执行。
  ⑤ 确认传统的binlog复制完毕,该值为0
  show status like 'ongoing_anonymous_transaction_count';
  所有节点进行判断 show status like 'ongoing_anonymous_transaction_count’; 为零
  ⑥ 所有的节点执行: flush logs; 用于切换一下日志。
  ⑦ 所有的节点启用gtid_mode
  set @@global.gtid_mode=on;
  ⑧ 启用Gtid的自动查找节点复制:
  stop slave;
  change master to master_auto_position=1;
  start slave;
  ⑨ 把gtid_mode = on相关配置写入配置文件
  gtid_mode=on
  enforce_gtid_consistency=on
  最后可以看到传统复制的一个变化,通过BINLOG观察:

  #171116 19:16:57 server>
  #171116 19:17:03 server>
  #171116 19:19:54 server>
  #171116 19:19:59 server>
  #171116 19:21:06 server>
  #171116 19:21:11 server>  GTID复制数据:

  #171117 13:40:00 server>
  #171117 13:40:00 server>
  #171117 13:40:00 server>
  #171117 13:40:00 server>
  #171117 13:40:00 server>  #####从GTID模式到传统模式过程:
  ① 在SLAVE:
  stop slave;
  mysql> show slave status\G;
  *************************** 1. row ***************************
  Slave_IO_State:
  Master_Host: 192.168.1.130
  Master_User: dlan
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000010
  Read_Master_Log_Pos: 458282
  同时执行:
  change master to master_auto_position=0,MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=458282;
  start slave;
  ②在MS上执行:
  SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
  ③在MS上执行
  SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
  ④在MS上执行
  SELECT @@GLOBAL.GTID_OWNED;  ##都为空就可以
  ⑤关闭GTID
  SET @@GLOBAL.GTID_MODE = OFF;
  最后观察又GTID又是匿名:

  #171117 14:32:38 server>
  #171117 14:32:38 server>
  #171117 14:32:38 server>
  #171117 14:32:38 server>
  #171117 14:32:38 server>
  #171117 14:32:38 server>
  #171117 14:32:38 server>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602617-1-1.html 上篇帖子: MySQL+Heartbeat+DRBD构建高可用MySQL环境 下篇帖子: MySQL管理之SQL语句实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表