MYSQL5.7 MASTER-SLAVE 在线关闭和启动GTID

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 原创转载注明出处 本文参考:MYSQL 5.7官方手册 本文步骤中master slave代表主库和从库都需要更改、 slave代表从库更改、master代表主库更改 在MYSQL 5.
原创转载注明出处

本文参考:MYSQL 5.7官方手册
本文步骤中master slave代表主库和从库都需要更改、 slave代表从库更改、master代表主库更改


在MYSQL 5.7.6后可以在线的开启和关闭gtid功能,为了做到这一点MYSQL对GTID_MODE做了改动
增加了OFF_PERMISSIVE和ON_PERMISSIVE来完成平滑的切换,下面看看有关参数


ENFORCE_GTID_CONSISTENCY:这个参数主要有如下设置,主要用于不让违反GTID设置的操作执行,如果执行会报错如:
Statement violates GTID consistency: CREATE TABLE ... SELECT.
? OFF: all transactions are allowed to violate GTID consistency.(所有操作允许)
? ON: no transaction is allowed to violate GTID consistency.(不允许违反gtid的操作,并且报错)
? WARN: all transactions are allowed to violate GTID consistency, but a warning is generated in this case.
Added in MySQL 5.7.6.(所有操作允许,但是违反GTID的操作会报出警告)


GTID_MODE:这个参数设置如下,主要考虑到了平滑的切换
? OFF(0): Both new and replicated transactions must be anonymous.(生成的是匿名事物,slave也只能应用匿名事物)
? OFF_PERMISSIVE:(1) New transactions are anonymous. Replicated transactions can be either
anonymous or GTID transactions.(生成的是匿名事物,slave可以应用匿名和GTID事物)
? ON_PERMISSIVE(2): New transactions are GTID transactions. Replicated transactions can be either
anonymous or GTID transactions.(生成的是GTID事物,slave可以应用匿名和GTID事物)
? ON(3): Both new and replicated transactions must be GTID transactions(生成的是GTID事物,slave也只能应用GTID事物)

违反gtid的操作:
1、CREATE TABLE ... SELECT.
2、CREATE TEMPORARY TABLE/DROP TEMPORARY TABLE
3、sql_slave_skip_counter
4、delete testii2,testii1 from testii2,testii1 where testii2.id=testii1.id; testii2为MYISAM、testii1为innodb
参考:18.1.3.4 Restrictions on Replication with GTIDs


一、在线启动gtid  
1、master slave
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
确定事物都支持gtid,不会在err log中出现警告如下:
2017-02-26T22:35:24.322055Z 55 [Warning] Statement violates GTID consistency: CREATE TABLE ... SELECT.


2、master slave
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;


3、master slave
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; 
生成的是匿名事物,slave可以应用匿名和GTID事物


4、master slave
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
生成的是GTID事物,slave可以应用匿名和GTID事物


5、master slave
确定已经没有匿名的事物
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
确定如下一般情况下有值,可能为空(压力很小甚至没有事物)
SELECT @@GLOBAL.GTID_OWNED;
确定此时的Retrieved_Gtid_Set Executed_Gtid_Set正常增长
(甚至你可以在slave上使用:
SELECT MASTER_POS_WAIT(file, position);
来强制等待slave端直到指定位置,这个位置就是你确定的使用GTID事物的位置)

到这一步实际上gtid事物已经开始使用了。


6、master slave
SET @@GLOBAL.GTID_MODE = ON;
生成的是GTID事物,slave也只能应用GTID事物


7、slave
stop slave;
CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
start slave;


8、master slave
修改配置文件my.cnf


二、在线关闭gtid 


1、slave

stop slave;


记录slave status
Exec_Master_Log_Pos: 7631438
Relay_Master_Log_File: bin_log.000016
执行
CHANGE MASTER TO MASTER_AUTO_POSITION = 0,
MASTER_LOG_FILE = 'bin_log.000016', 
MASTER_LOG_POS = 7631438
start slave;

2、master slave
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
生成的是GTID事物,slave可以应用匿名和GTID事物


3、master slave  
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
生成的是匿名事物,slave可以应用匿名和GTID事物


4、master slave
SELECT @@GLOBAL.GTID_OWNED;
等到主库和备库此显示为空,并且Retrieved_Gtid_Set Executed_Gtid_Set
不再变动.
(甚至你可以在slave上使用:
SELECT MASTER_POS_WAIT(file, position);
来强制等待slave端直到指定位置,这个位置就是你确定的没有使用GTID事物的位置)
完成这一步实际上GTID事物已经没有生成和应用了


5、master slave
SET @@GLOBAL.GTID_MODE = OFF;


6、master slave
修改配置文件my.cnf

注意在线开启步骤中第5步和在线关闭的第4步是重点。

作者微信:

               
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
存储 Cloud Native 关系型数据库
云原生|kubernetes|部署MySQL一主多从复制集群(基于GTID的复制)
云原生|kubernetes|部署MySQL一主多从复制集群(基于GTID的复制)
57 0
|
5月前
|
安全 关系型数据库 MySQL
MySQL的binlog日志和GTID
MySQL的binlog日志和GTID
66 1
|
5月前
|
监控 关系型数据库 MySQL
银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构
银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构
126 1
|
5月前
|
关系型数据库 MySQL
MySQL 5.7 基于GTID主从复制+并行复制+半同步复制
MySQL 5.7 基于GTID主从复制+并行复制+半同步复制
76 0
|
5月前
|
关系型数据库 MySQL
MySQL基于GTID的组复制(MGR)
MySQL基于GTID的组复制(MGR)
31 0
|
关系型数据库 MySQL
MySQL 基于 GTID 的组复制(MGR)
MySQL 基于 GTID 的组复制(MGR)
130 0
|
关系型数据库 MySQL
MySQL 5.7 基于 GTID 主从复制 + 并行复制 + 半同步复制
MySQL 5.7 基于 GTID 主从复制 + 并行复制 + 半同步复制
534 0
|
SQL 关系型数据库 MySQL
一个不规范操作导致MySQL主从同步中断(GTID模式)
一个不规范操作导致MySQL主从同步中断(GTID模式)
578 0
一个不规范操作导致MySQL主从同步中断(GTID模式)
|
关系型数据库 MySQL 数据库
基于GTID搭建主从MySQL
想让主从之间使用gtid的方式同步数据,需要我们在配置文件中开启mysql对gtid相关的配置信息 找到my.cnf ,在mysqld模块中加入如下的配置。(主库从库都这样)
144 0
|
关系型数据库 MySQL 数据库
【愚公系列】2022年04月 Mysql数据库-GTID同步
【愚公系列】2022年04月 Mysql数据库-GTID同步
160 0