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

原创转载注明出处

本文参考: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步是重点。

作者微信:

               

时间: 2024-09-20 05:12:28

MYSQL5.7 MASTER-SLAVE 在线关闭和启动GTID的相关文章

mysql(master/slave)主从复制原理及配置图文详解_Mysql

1 复制概述       Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.

PGPool-II master/slave mode using caveat

PGPool-II的master/slave模式类似load balance模式.只不过master/slave是与PGPool-II以外的第三方复制软件结合使用的.(如当前支持的slony和stream replication) PGPool会将需要复制的SQL发到Master数据库,不需要复制的SQL符合条件的情况下将可能被分发到Slave数据库以达到负载均衡的效果. 以下是Master/Slave mode使用注意事项: 1. 临时表的DDL,DML操作必须在Master库完成(PGPoo

redis 学习笔记(3)-master/slave(主/从模式)

类似mysql的master-slave模式一样,redis的master-slave可以提升系统的可用性,master节点写入cache后,会自动同步到slave上. 环境: master node: 10.6.144.155:7030 slave node: 10.6.144.156:7031   一.配置 仅需要在slave node上修改配置: 找到slaveof这行,参考下面的修改(填上master node的Ip和端口就完事了) slaveof 10.6.144.155 7030 另

34.5. Master / Slave

34.5.1. master /etc/named.conf # cat /etc/named.conf zone "example.com" { type master; file "/var/named/example.com.zone"; allow-transfer { 172.16.1.23; 120.100.100.23; }; }; notify 指令会自动通知所有这个域的所有在ns记录上的机器,also-notify指令可以用来通知所有不在ns记录上

教你如何在Windows下搭建MySQL Master Slave

一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用keepalived这个HA工具,但是我们可以接受人工进行切换,有什么好的方案呢? 二.几种Master/Slave逻辑架构图 (Figure1:单Master-单Slave) (Figure2:单Master-多Slave) (Figure3:单Master-级联Slave) (Figure4:Master/Slave部署逻辑图)

如何关闭和启动oracle数据库

(oracle)启动关闭数据库 启动和关闭oracle有很多种方法. 这里只给出3种方法: l Sql*plus l OEM控制台 l Windows 控制台 1.以sql*plus为例: a.准备 首先我们用sql*plus来连接到Oracle Sqlplus /nolog 是以不连接数据库的方式启动sql*plus Connect /as sysdba 是以DBA身份连接到oracle b.启动 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bia

win8/win8.1系统如何关闭快速启动功能?

  win8/win8.1系统如何关闭快速启动功能? 1,打开控制面板,选择"硬件和声音" 2.在系统桌面,左键点击右下角系统自带"电池"图标,出现如下界面,选择更多"电源选项"; 3.弹出的"电源选项"界面,如下图所示,点击"选择电源按钮的功能"; 4.在弹出界面,发现部分选项无法更改,先点击"更改当前不可用的设置",如下图所示, 5.在如下界面,之前无法选择的选项已经可以更改,可以看

win7系统使用360关闭开机启动项提升开机速度的方法

  win7系统使用360关闭开机启动项提升开机速度的方法 具体方法如下: 1.打开360安全卫士; 2.点击"优化加速"; 3.会出来一个新的界面; 4.然后把所有的选项都打对号; 5.然后,点击"开始扫描"; 6.然后,扫描完成后,接着"立即优化"; 7.接着就等着优化完成吧. 上述教程内容就是win7系统使用360关闭开机启动项加开机速度的方法,大家可以尝试关闭一些不常用的开机启动项.

Mac如何关闭开机启动项

  细心的Mac用户会发现,每次开启Mac的时候会有一些应用程序也跟着自动启动,有时候我们并不需要这些程序开启,那么我们如何关闭Mac的开机启动项呢?下面PC6小编教大家如何设置关闭开机启动项: 1.首先进入"系统偏好设置"的 "用户与群组"选项. 2.打开用户与群组后可以看到如图所示的"登陆项"标签. 3.可以看到有两个应用程序是默认开机启动的,点击左下角的"+-" 即可添加或删除开机启动程序.如果机器有设置密码,先点击左下