MySQL5.7传统快速切换GTID方法

发布时间:2020-05-21 15:25:31 作者:三月
来源:网络 阅读:220

本文主要给大家介绍MySQL5.7传统快速切换GTID方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL5.7传统快速切换GTID方法吧。

当前场景:

某些业务场景还未开启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时,以下三类语句时不支持的

而实际上这个限制没有必要这么严格,

在线开启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 id 2  end_log_pos 16188 CRC32 0x75584212 Anonymous_GTIDlast_committed=50sequence_number=51

#171116 19:17:03 server id 2  end_log_pos 16522 CRC32 0x3b42637e Anonymous_GTIDlast_committed=51sequence_number=52

#171116 19:19:54 server id 2  end_log_pos 16851 CRC32 0x08383e43 Anonymous_GTIDlast_committed=52sequence_number=53

#171116 19:19:59 server id 2  end_log_pos 17185 CRC32 0xd3445edc Anonymous_GTIDlast_committed=53sequence_number=54

#171116 19:21:06 server id 2  end_log_pos 17514 CRC32 0xcfd6ac97 Anonymous_GTIDlast_committed=54sequence_number=55

#171116 19:21:11 server id 2  end_log_pos 17802 CRC32 0xee11dc12 Anonymous_GTIDlast_committed=55sequence_number=56

GTID复制数据:

#171117 13:40:00 server id 2  end_log_pos 456322 CRC32 0xf7074b53 GTIDlast_committed=1036sequence_number=1132

#171117 13:40:00 server id 2  end_log_pos 456725 CRC32 0xcb86f0b2 GTIDlast_committed=1036sequence_number=1133

#171117 13:40:00 server id 2  end_log_pos 457128 CRC32 0x8b14303e GTIDlast_committed=1036sequence_number=1134

#171117 13:40:00 server id 2  end_log_pos 457533 CRC32 0x4f492e18 GTIDlast_committed=1036sequence_number=1135

#171117 13:40:00 server id 2  end_log_pos 457940 CRC32 0xf0b078b6 GTIDlast_committed=1036sequence_number=1136

#####从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 id 2  end_log_pos 319730 CRC32 0xc26f13a7 Anonymous_GTID last_committed=699sequence_number=793

#171117 14:32:38 server id 2  end_log_pos 320133 CRC32 0xf480c415 Anonymous_GTIDlast_committed=699sequence_number=794

#171117 14:32:38 server id 2  end_log_pos 320538 CRC32 0xa65ed8f1 Anonymous_GTIDlast_committed=699sequence_number=795

#171117 14:32:38 server id 2  end_log_pos 320945 CRC32 0xb7330b5e Anonymous_GTIDlast_committed=699sequence_number=796

#171117 14:32:38 server id 2  end_log_pos 321348 CRC32 0x619e04bb Anonymous_GTIDlast_committed=699sequence_number=797

#171117 14:32:38 server id 2  end_log_pos 321751 CRC32 0x250f903c Anonymous_GTIDlast_committed=699sequence_number=798

#171117 14:32:38 server id 2  end_log_pos 322156 CRC32 0x247a96f9 Anonymous_GTIDlast_committed=699sequence_number=799

看完以上关于MySQL5.7传统快速切换GTID方法,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。

推荐阅读:
  1. MySQL5.7新增加的特性gtid基础介绍
  2. MySQL5.7实现GTID功能的实验流程及结果

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

gtid mysql %d

上一篇:mysql怎么修改root密码?

下一篇:mac帧进入交换机后如何添加去除vlan信息的过程

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》