MySQL5.7传统快速切换GTID方法
admin
2023-05-13 09:22:01
0

本文主要给大家介绍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时,以下三类语句时不支持的

  • 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 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、可能是外机支架的安装不稳或者是组合支架中固定螺丝没有拧紧导致变形,就会造成空调外机摆放不平整,空...
刚买的空调按装完了室内的挂机有... 安装不稳定。空调室内机的设置和室外机的连接状况也影响空调的定时使用和噪音,如果室内机设置不稳定,室外...
墙面发霉对人体的危害有哪些 发霉的墙壁会释放霉菌孢子,而且大多数都是有毒的。霉菌孢子的长期吸入对人体呼吸系统有很大影响,可引起呼...
甲醛超标对身体有什么危害 最佳回答 甲醛超标对身体也是有一定危害的,首先甲醛超标容易影响人的呼吸系统,有可能会出现窒息情况,也...
美高官称已大幅削弱伊朗军事力量 据凤凰卫视报道,美国中央司令部司令库珀5月14日就伊朗战事出席国会听证会时表示,美国的“史诗怒火行动...
俄外交部对日发声 据俄外交部网站发布的消息,俄罗斯外交部发言人扎哈罗娃14日表示,日本若有意与俄罗斯重启对话,理应先重...
洛阳:偃师区以“合作社+农户”... 眼下正值土豆收获季节,洛阳市偃师区翟镇田中村的田间地头一派繁忙景象:随着收获机械翻卷而过,一颗颗圆润...
坚定不移沿着习近平总书记指引的... 5月7日,孟州市河阳街道缑村麦田里,植保无人机正在开展“飞防”作业。 张泽斌 周萍 摄河南粮食总产量...