边肖将与大家分享MySQL如何在线开启/关闭GTID。相信大部分人还不太了解,所以分享这篇文章给大家参考。希望你看完这篇文章后收获多多。让我们一起来发现吧!
一 前言
MySQL DBA大多熟悉MySQL 5.6,开始提供基于GTID模式的主从复制。该功能简化了复制,降低了主从复制维护的难度,提高了复制的可操作性,不再依赖binlog文件名和文件中的位置。然而,它有许多局限性。5.7版MySQL支持对GTID的以下改进:
答:不需要重启MySQL服务器。
b配置过程在线,整个复制集群仍然对外提供读写服务。
不需要改变复制拓扑。
可以在任何结构的复制集群中在线启用D GTID功能。
在线修改GTID时,必须遵循以下顺序。
off-off _ permission-on _ permission-on不能跳过链接。比如gtid_mode不能直接从off改成on,否则MySQL会提示你。
错误1788(HY000): @ @ GLOBAL的值。一次只能改变一个步骤。还要注意,该值必须在所有服务器上同时递增或递减。有关说明,请参阅手册。
在练习在线升级之前,我们需要了解一下在MySQL 5.7 :版本中GTID_MODE的含义。
OFF :不生成GTID,GTID,Slave只接受没有GTID的交易。
OFF_PERMISSIVE :不生成GTID,GTID,Slave接受没有GTID的事务和有GTID的事务。
On _ permission:生成GTID和GTID,Slave接受没有GTID的事务和有GTID的事务。
ON :生成GTID,GTID,Slave只能接受带有GTID的交易。00-1010需要注意的是,只有数据库版本为5.7.6以及之后版本才能支持GTID的在线开通。测试GTID开启时模拟主库读写压力测试:
sysbench-test=OLTP . Lua-OLTP-tables-count=1-OLTP-table-size=500000-MySQL-db=sysbench-MySQL-user=sysbench-MySQL-password=sysbench-MySQL-SOC ket=/SRV/my 3316/run/MySQL . sock-max-time=600-num-threads=1-OLTP-test-mode=complex run
00-1010 setglobal1。不支持非事务引擎。
2.创建表格.不支持select语句(主库执行时直接报告错误)。
3.一个SQL不允许同时更新事务引擎和非事务引擎的表。
4.不支持创建临时表和删除临时语句。
如果没有警告,请在所有实例上执行:
设置全局ENFORCE _ GTID _ CONSISTENCY=ON
二 在线开启GTID
设置全局GTID _ MODE=OFF _ PERMISSIVE
如果主库没有生成GTID,GTID,从属实例接受没有GTID的事务和有GTID的事务。在执行下一步之前,请确保在所有实例中执行该命令。
2.1 在主从复制结构中所有的实例中执行
设置全局GTID _ MODE=ON _ PERMISSIVE
主库开始生成GTID,GTID,Slave接受没有GTID的事务和有GTID的事务。
00-1010在每个实例节点上执行以下命令,以检查匿名事务是否被使用
好多检查几次,以便确认该参数的值是0.
[RW][TEST:3316]>SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
+-------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0 |
+-------------------------------------+-------+
1 row in set (0.00 sec)
如果在从库上检查只需要一次满足为0 即可。
2.5 确保第四步之前的binlog全部为应用。
确保操作之前的所有binlog都已经被其他服务器应用了,因为匿名的GTID必须确保已经复制应用成功,才可以进行下一步操作。如何检查呢? 其实最简单的方式是在从库库执行show slave status检查应用位点的情况。如果追上了,则可以继续。否则需要等待从库应用完binlog之后在进行下一步。
2.5 在主从复制结构中所有的实例中执行:
set global GTID_MODE = ON;
该参数的功能是让系统产生GTID ,Slave只能接受带GTID的事务。
2.6 在从库上执行:
设置slave 复制中MASTER_AUTO_POSITION=1。
[RO][TEST:3316]>stop slave;
[RO][TEST:3316]>CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
[RO][TEST:3316]>[RW][TEST:3316]>start slave;
至此,将基于位点的复制关系升级为GTID模式。结束了吗?还没呢,记得修改my.cnf 添加
gtid_mode = on
enforce_gtid_consistency = on
三 在线关闭GTID
关闭GTID的步骤其实和开启的步骤相反:
3.1 关闭slave 复制中的 MASTERAUTOPOSITION
[RO][TEST:3316]>stop slave;
[RO][TEST:3316]>CHANGE MASTER TO MASTER_LOG_FILE = file,
MASTER_LOG_POS = position MASTER_AUTO_POSITION = 0;
[RO][TEST:3316]>[RW][TEST:3316]>start slave;
3.2 在所有的实例上执行:
set global GTID_MODE = ON_PERMISSIVE;
3.3 在所有的实例上执行:
set global GTID_MODE = OFF_PERMISSIVE;
3.4 等待 @@GLOBAL.GTID_OWNED 的值是一个空字符串为止。
SELECT @@GLOBAL.GTID_OWNED;
3.5 检查master上的binlog中的日志都已经被slave应用完毕
3.6 在所有实例上设置GTID_MODE 为off
set global GTID_MODE = OFF;
3.7 在所有实例上执行:
SET global GTID_MODE = OFF;
SET global ENFORCE_GTID_CONSISTENCY = OFF;
以上是“MySQL如何在线开启/关闭GTID”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/73746.html