[toc]
## 将基于日志的复制变更为基于GTID的复制处理步骤
### **先决条件**
1. 集群中所有的服务器版本均高于5.7.6
2. 集群中所有的服务器gtid\_mode都设置为off(使用 show variables like 'gtid\_mode' 命令查看)
### 设置参数
gtid\_mode在5.7版本有一下4个值
* off:关闭
* off\_permissive:准备关闭
* on\_permissive:准备开启
* on:开启
这4个值只能从`off-->off\_permissive-->on\_permissive-->on`或者(`off<--off\_permissive<--on\_permissive<--on`)的顺序设置
>[info] 在设置的过程中用`tail -f`命令查看一下`mysql-error.log`是否有异常信息。
#### master
~~~
set @@global.enforce_gtid_consistency=warn; //强制设置gtid一致性,值为:warn。
set @@global.enforce_gtid_consistency=on; //强制设置gtid一致性,值为:on
set @@global.gtid_mode=off_permissive; //设置gtid_mode为准备关闭状态
set @@global.gtid_mode=on_permissive; //设置gtid_mode为准备开启状态
# 查看从服务器 show status like 'ongoing_anonymous_transaction_count' 为0或者空以后设置
set @@global.gtid_mode=on; //设置gtid_mode为开启状态
~~~
**show status like 'ongoing\_anonymous\_transaction\_count'**
查看基于日志的复制的事务数量,为0或者为空表示正常。这一步是为了保证基于日志复制的数据的一致性,防止有事务在主服务器上执行完成,在从服务器上没有被执行,导致数据丢失
#### slave
~~~
set @@global.enforce_gtid_consistency=warn; //强制设置gtid一致性,值为:warn。
set @@global.enforce_gtid_consistency=on; //强制设置gtid一致性,值为:on
set @@global.gtid_mode=off_permissive; //设置gtid_mode为准备关闭状态
set @@global.gtid_mode=on_permissive; //设置gtid_mode为准备开启状态
set @@global.gtid_mode=on; //设置gtid_mode为开启状态
stop slave; # 关闭主从复制
change master to master_auto_position=1 # 改变复制方式
start slave; # 重启主从复制
show slave status; # 查看当前复制状态
~~~
![](https://i.vgy.me/vkLfYt.png)
![](https://i.vgy.me/ErtCWN.png)
### 持久配置(重要操作)
确认成功切换到基于事物的复制之后,需要将一下2个参数添加到my.cnf中(所有的mysql服务器节点)
保证在下次重启mysql服务器的时候会自动的启动全局事物复制的方式进行主从同步
* enforce\_gtid\_consistency=on
* gtid\_mode=on
## 将基于事物复制变更为基于日志的复制
由于工具或接入的第三方应用不支持事务的复制,则要改为基于日志的复制
### **先决条件**
1. 集群中所有的服务器版本均高于5.7.6
2. 集群中所有的服务器gtid\_mode都设置为on(使用 show variables like 'gtid\_mode' 命令查看)
### 配置步骤
#### master
```
# 获得file和position,然后去slave切换为日志复制
show master status;
set @@global.gtid_mode=on_permissive; -- 设置gtid_mode为准备开启状态
set @@global.gtid_mode=off_permissive; -- 设置gtid_mode为准备关闭状态
select @@global.gtid_owned;
-- 查看gtid_ownend是否为空字符串(在所有服务器上均要查看)
set @@global.gtid_mode=off; -- 关闭
```
#### slave
```
stop slave;
change master to master_auto_position=0,master_log_file='edu-mysql-bin.000006',master_log_pos=461; -- //停止事务复制,设置日志复制的日志文件和日志文件节点
start slave;
set @@global.gtid_mode=on_permissive; -- 设置gtid_mode为准备开启状态
set @@global.gtid_mode=off_permissive; -- 设置gtid_mode为准备关闭状态
select @@global.gtid_owned;
-- 查看gtid_ownend是否为空字符串(在所有服务器上均要查看)
set @@global.gtid_mode=off; -- 关闭
show slave status;
```
![](https://i.vgy.me/uKVGvV.png)
### 持久配置
修改my.cnf中(所有的mysql服务器节点)
* enforce\_gtid\_consistency=off
* gtid\_mode=off
- 【mysql的编程专题①】流程控制与其他语法
- 【mysql的编程专题②】触发器
- 【mysql的编程专题③】内置函数
- 【mysql的编程专题④】存储过程
- 【mysql的编程专题⑤】自定义函数
- 【mysql的编程专题⑥】视图
- 【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
- 【mysql的设计与优化专题(2)】数据中设计中的范式与反范式
- 【mysql的设计与优化专题(3)】字段类型与合理的选择字段类型
- 【mysql的设计与优化专题(4)】表的垂直拆分和水平拆分
- 【mysql的设计与优化专题(5)】慢查询详解
- 【mysql的设计与优化专题(6)】mysql索引攻略
- 【Mysql问题集锦(1)】mysql不能使用innodb存储引擎
- 【Mysql进阶技巧(2)】利用mysql生成唯一序号
- 【Mysql进阶技巧(1)】MySQL的多表关联与自连接
- 【Mysql高可用架构(1)】基于日志点的主从复制
- 【Mysql高可用架构(2)】主从管理的系统视图
- 【Mysql高可用架构(3)】基于GTID的主从复制
- 【Mysql高可用架构(4)】在线变更复制类型
- 【Mysql高可用架构(5)】多源复制(多主一从)
- 【Mysql高可用架构(6)】多线程复制
- 【Mysql高可用架构(7)】在线设置复制过滤
- 【Mysql高可用架构(8)】解决主从不一致
- 【Mysql高可用架构(9)】初识mycat以及制作mycat镜像
- 【Mysql高可用架构(10)】mycat配置mysql读写分离
- MyCat 集群部署(HAProxy + MyCat)
- 常用复杂sql语句整理