开启前
和业务发邮件沟通,确认线上业务是否使用GTID的限制语法。
1、CREATE TABLE ... SELECT
2、在一个事务中 CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE
3、在一个事务中或语句中同时更新事务和非事务表,比如在一个事务中更新 innodb表和myisam表。要更新的所有非事务表是临时表除外
检测开启条件
1.数据库版本 >5.7.6
- select @@version;
2.在每个mysql实例上,将ENFORCE_GTID_CONSISTENCY设置为warn,观察error log是否有警告输出(和业务的反馈邮件进行double check)
- set @@global.enforce_gtid_consistency=warn;
3.所有的实例 gtid_mode=off
- show variables like 'gtid_mode';
可选项:
4.检查参数是否为on(防止从5.6升级上来的5.7有未记录gtid位点的binlog获取purge值的时候会扫描至第一个binlog,io线程好几秒之后才会开始复制)
- show variables like 'binlog_gtid_simple_recovery';
在线开启GTID
1.开启强一致性检测参数
- SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
2.在每个mysql实例上,设置GTID_MODE为off_permissive
- SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
3.在每个mysql实例上,设置GTID_MODE为on_permissive;
- SET @@GLOBAL.GTID_MODE = on_permissive;
4.检查传统复制参数是否为0,在每个实例上检查参数
- SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
5.确保所有(非GTID事务)已经被完全复制到所有从库的server上
主库:show master status;
从库:SELECT MASTER_POS_WAIT(file, position);
Or
在master上:
show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
|mysql-bin.000080 | 8588 | | | |
+-----------------+----------+--------------+------------------+-------------------+
在slave上,
show slave status\G
Relay_Master_Log_File: mysql-bin.000080
Exec_Master_Log_Pos: 8588
6.开启GTID
- SET @@GLOBAL.GTID_MODE = ON;
8.从库设置purge点
master:
show master status\G
Executed_Gtid_Set: 1a3c6110-e537-11e7-85fb-782bcb1059e1:1-86502
show global variables like 'gtid_purged';
gtid_purged | 1a3c6110-e537-11e7-85fb-782bcb1059e1:1-2,2dq23510-e537-11e7-85fb-782bcb1059e1:76
slave:
- stop slave;
- show slave status\G -----------查看gtid_executed点,记录position复制位点,防止卡库需要回滚。
- Executed_Gtid_Set:
- 1a3c6110-e537-11e7-85fb-782bcb1059e1:1-86505
- reset master;
- set global gtid_purged='1a3c6110-e537-11e7-85fb-782bcb1059e1:1-86505,2dq23510-e537-11e7-85fb-782bcb1059e1:76' ---------------主库execute和purge的uuid并集,主库uuid的trxid和从库执行到的位点一样
7.添加slave自动发现主库gtid点
- CHANGE MASTER TO MASTER_AUTO_POSITION = 1 ;
- START SLAVE ;
8.参数写到配置文件中!!
- gtid_mode = on
- enforce_gtid_consistency=on
快速回滚后退
1、停止复制
- STOP SLAVE
- CHANGE MASTER TO MASTER_AUTO_POSITION = 0;
2、转换为传统的位点复制(show slave status可以看到)
- CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = file, MASTER_LOG_POS = position ;
- START SLAVE;
2、每个实例上设置ON_PERMISSIVE
- SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
3、每个实例上设置OFF_PERMISSIVE
- SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4、检查持有的gtid是否为0
- SELECT @@GLOBAL.GTID_OWNED;
5、关闭GTID复制
- SET @@GLOBAL.GTID_MODE = OFF;
6、关闭强一致性检测
- set @@global.enforce_gtid_consistency=OFF
6、写入到配置文件中
GLOBAL.GTID_MODE = OFF;
enforce_gtid_consistency=OFF