本文主要给大家介绍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