MySQL在线开启GTID的每个阶段是要在做啥?

1.GTID 
mysql主从同步有两种机制,一种是基于binlog文件名及位点的同步方式:匿名事务:Anonymous_gtid_log_event;
另外一种是指定全局事务ID:Gtid_log_event; 

基于GTID的方式在一主多从切换有着明显优势外,对于日常复制异常的故障诊断也更为方便。
在日常运维或升级过程中,免不了要做GTID的开启或关闭。
MySQL5.7.6之后开始支持动态开启和关闭GTID。取值如下: 
OFF:只允许匿名事务被复制同步。 
OFF_PERMISSIVE:新产生的事务都是匿名事务,但也允许有GTID事务被复制同步。
ON_PERMISSIVE:新产生的事务都是GTID事务,但也允许有匿名事务被复制同步。
ON :只允许GTID事务被复制同步。
可以看出,在线修改GTID,是逐渐将匿名事务转化为GTID事务过程。
2.在线开启GTID 

(1)设置GTID 校验 ENFORCE_GTID_CONSISTENCY=WARN; 
该操作的目的是允许在主库执行的SQL语句违反GTID一致性校验,且只在主库的错误日志中输出WARNING 
级别以上做提醒。
CREATE TABLE AS SELECT 语法在GTID模式下不支持,在MYSQL8.0.21以后GTID模式下也支持。该语法变为了一个特殊 
的原子性DDL;
#主从均执行。
set @@global.enforce_gtid_consistency=warn; 
只会在错误日志出现警告,但不会报错。

(2)设置GTID校验 ENFORCE_GTID_CONSISTENCY=ON; 
确认上一个步骤未在错误日中出现相关WARNING信息后,正式开启GTID一致性校验,当设置为ON后。
如果再执行 CREATE TABLE AS SELECT 会直接报错。(MySQL5.7) 

mysql> set @@global.enforce_gtid_consistency=warn;
Query OK, 0 rows affected (0.00 sec)

mysql> set @@global.enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)
mysql> create table t2 as select * from t1;
Query OK, 0 rows affected (12.26 sec)

(3)设置 GTID_MODE=OFF_PERMISSIVE; 
该操作表示新产生的事务依旧是匿名事务,但也允许有GTID事务被复制同步。对于在线开启GTID模式而言。
该步骤就是一个单纯的过渡属性。
SET @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
(4)GTID_MODE 为 ON_PERMISSIVE;
表示新产生的都是GTID事务,但也允许有匿名事务被复制。从这个阶段开始,就是一个正式转换的过程。 
但依旧兼容这两种事务。
SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;
(5)确保匿名事务回放完毕。
该步骤的目的是确保在正式转换为完整的GTID模式前,老的匿名事务均已被回放完毕。确保GTID_MODE 设置为ON; 
不会因为残留的匿名事务导致复制同步报错。
#仅在从库执行。
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
只要出现过0即可表示已经转换完毕,即便后续该状态从0变为非0也不影响。

#方法二:在从库上多次执行: 
select * from performance_schema.replication_applier_status_by_worker; 
该视图中: LAST_SEEN_TRANSACTION 可以观察当前同步的事务是否还存在ANONYMOUS事务。 

(6)进行日志切换 
flush logs; 
该操作的目的是为了在主库触发binlog的轮换,使得新生成的binlog 都是包含GTID的事务。防止 
一个binlog中包含2种类型的事务日志。
(7)正式开启gtid_mode=on; 
SET @@GLOBAL.GTID_MODE=ON; 
SELECT @@GTID_MODE,@@ENFORCE_GTID_CONSISTENCY;
mysql> SET @@GLOBAL.GTID_MODE=ON; 
Query OK, 0 rows affected (1.69 sec)

mysql> SELECT @@GTID_MODE,@@ENFORCE_GTID_CONSISTENCY;
+-------------+----------------------------+
| @@GTID_MODE | @@ENFORCE_GTID_CONSISTENCY |
+-------------+----------------------------+
| ON          | ON                         |
+-------------+----------------------------+
1 row in set (0.00 sec)
(8)修改参数文件 
vim my.cnf 
[mysqld]
gtid_mode=on
enforce_gtid_consistency=1 

(9)修改复制模式为GTID方式
在开启GTID模式后,我们要将基于点位复制模式改为基于GTID模式。
STOP SLAVE; 
CHANGE MASTER TO MASTER_AUTO_POSISION=1; 
START SLAVE; 
SWOH SLAVE STATUS\G; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值