问题描述
现有数据库基于位置复制,现在需要切换为基于 GTID 复制。
环境概述
(1)现有主从两台服务器,(2)当前它们基于位置复制。
前提条件
1)以下多数操作需要 ROOT 用户,或者具有 SUPER 权限;关机则需要 SHUTDOWN 权限。
解决方法
第一步、完成数据同步,进入只读模式
使两台数据库进入只读模式,未授予 SUPER 权限的客户端用户将无法写入:
SET @@GLOBAL.read_only = ON;
补充说明:
1)使主库能够处理完全部事务(提交或回滚);
2)使从库能够更上主库,让两种数据保持一致;
当数据库启用 GTID 模式后,由于在旧 binlog 中不包含 GTID,所以旧 binlog不能当前数据中应用,也就是说旧 binlog 等同于作废。这也是第五步(丢弃旧备份,创建新备份)存在的原因。
第二步、停止两台数据库服务
在确保两台主机数据一致后,停止数据库服务(详细过程不再赘述)。
第三步、修改配置,以 GTID 启动
配置两台服务器,启用 GTID 模式:
gtid_mode=ON enforce-gtid-consistency=ON
在配置完成后,启动数据库。在启动从库时,应该使用 –skip-slave-start 选项,防止从库启用复制。
在主库中,必须启用 binlog 以用于复制。在从库中,可以关闭 binlog 功能(skip-log-bin,–log-slave-updates=OFF)
第四步、设置从库,使其从主库读取
设置从库以使用主库作为数据源,并使用基于 GTID 的自动定位:
CHANGE MASTER TO MASTER_HOST = host, MASTER_PORT = port, MASTER_USER = user, MASTER_PASSWORD = password, MASTER_AUTO_POSITION = 1;
第五步、丢弃旧备份,创建新备份
对于旧的备份,由于没有启用 GTID 功能,因此无法在启用 GTID 的服务器中使用。
我们需要创建新的备份。可以使用 FLUSH LOG 推进日志论转,然后创建备份。
第六步、启用从库复制,关闭只读模式
在从库上执行,以开始数据复制:
START SLAVE;
关闭两台服务器的只读模式,以允许客户端写入数据:
SET @@GLOBAL.read_only = OFF;
参考文献
MySQL 5.7 Reference Manual / Setting Up Replication Using GTIDs