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

  

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

当前场景:

某些业务场景还未开启GTID服务组,在最新版本中,BINLOG组提交也基于GTID方式,因此如何检测是否符合开启GTID条件,在线切换使用GTID,以及如何快速回滚:

gtid_mode参数新选项:MySQL提供两个额外的选项off_permissive和on_permissive

,,,, gtid-mode的几种状态说明:
,,,,,,,,:不产生GTID,基于BINLOG +位置,奴隶也不能接受GTID的日志;
,,,,,,,, off_permissive:不产生GTID,但做奴隶可为以识别GTID事务也可以识别非GTID事务;
,,,,,,,, on_permissive:产生GTID事务,奴隶可以处理GTID事务和非GTID事务;
,,,,,,,,:产生GTID事务,奴隶只接受GTID事务

GTID三个限制

enforce-gtid-consistency=时,以下三类语句时不支持的

<李>

CREATE TABLE……李SELECT语句

<李>

创建临时表或删除临时表语句内部交易

<李>

事务或语句更新事务和nontransactional表。有一个例外,nontransactional DML允许在同一个事务或事务DML语句一样,如果所有nontransactional表都是暂时的。

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

<李>

CREATE TABLE……SELECT语句

对于binlog_format=行,gtid_next=& # 39;自动# 39;时可以放开限制。
生成的binlog包含两个GTID,一个是建表语句,一个是包含多个插入的事务。

<李>

事务中包含事务表和非事务表

对于gtid_next=& # 39;自动# 39;时可以放开限制。
生成的binlog包含两个GTID,一个是所有非事务表的,一个是所有事务表的。
对更新多表(包含事务表和非事务表)此时需额外要求binlog_format=行又是;李,

在线开启GTID过程如下:

①所有的服务器上执行

,,,设置@@global。enforce_gtid_consistency=警告;特别注意:这一步是关建的一步使用不能出现警告。会将不符合的语句记入错误日志

②所有的服务器上执行:

,,,设置@@global。enforce_gtid_consistency=,

③所有的服务器上执行(不关心最先最后,但要执行完):

,,,设置@@global。gtid_mode=off_permissive;

④所有的服务器上执行:,

,设置@@global.gtid_mode=on_permissive;

,实质在这一步骤生成的日志都是带GTID的日志了,这个步骤号称是不关心任何节点,但从实际管理上推荐在奴隶上先执行,然后再去掌握上执行。

⑤确认传统的binlog复制完毕,该值为0

,显示状态像& # 39;ongoing_anonymous_transaction_count& # 39;;

,所有节点进行判断显示状态像& # 39;ongoing_anonymous_transaction_count ';为零

⑥所有的节点执行:刷新日志;用于切换一下日志。  

⑦ 所有的节点启用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

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