传统复制与 GTID复制的切换知识点

在5.6以后,可以通过命令动态修改.

注意有些命令是需要主从都要执行,有些命令是只在slave执行。

gtid_mode 的几种状态值说明:
OFF: 不产生 GTID, 基于 binlog+position,也不能接受GTID的日志。默认值
OFF_PERMISSIVE:  不生产 GTID,但作为slave可以识别GTID事务也可以识别非GTID事务
ON_PERMISSIVE: 产生GTID,slave可以处理GTID事务和非GTID事务
ON: 产生GTID事务,slave只接受GTID事务

实验一:将传统复制切换到GTID复制

启用GTID:

set @@global.enforce_gtid_consitency=warn;
set @@global.enforce_gtid_consistency=on;
set @@global.gtid_mode=OFF_PERMISSIVE; #不产生gtid,但可以处理gtid
set @@global.gtid_mode=ON_PERMISSIVE; #产生gtid,也可以处理gtid
show status like 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
set @@global.gtid_ode=on;

stop slave [for channel 'channel'];change master to master_auto_postion=1; start slave;(slave)

更改复制到自动识别GTID环境

3.修改配置文件 my.cnf

gtid-mode=on
enforce_gtid_consistency=on

实验二:将GTID复制切换到传统复制

禁用GTID:

1.停止复制,禁止master_auto_position

stop slave [for channel 'channel_name'];
change master to mster_auto_position=1,master_log_file=file,MASTER_LOG_POS=position [FOR CHANNEL 'channel'];
start slave [for channel 'channel_name'];

其中master_log_pos为'Exec_Master_Log_Pos'的值

2.更改日志格式

set @@global.gtid_mode=ON_PERMISSIVE;
set @@global.gtid_mode=OFF_PERMISSIVE;
select @@global.gtid_owned;
set @@global.gtid_mode=off;
set global enforce_gtid_consistency=off;

3.修改配置文件 my.cnf

[mysqld]
gtid-mode=off
enforce_gtid_consistency=off

-----------------------

显示日志的event

show binlog event in 'mysql-bin.000005';

 

如果设置修改了复制方式

set @@global.gtid_mode = OFF_PERMISSIVE;

禁止产生GTID,会产生一个新的二进制文件,可以在此命令的前后分别执行 show master status 查看此影响。