400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

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

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

高碑店ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

当前场景:

某些业务场景还未开启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方法,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。


分享题目:MySQL5.7传统快速切换GTID方法
标题路径:http://mzwzsj.com/article/jogehe.html

其他资讯

让你的专属顾问为你服务