为 RDS for MySQL 的现有只读副本启用基于 GTID 的复制
对于具有不使用基于 GTID 的复制的只读副本的现有 MySQL 数据库实例,您可以在数据库实例和只读副本之间配置基于 GTID 的复制。
为现有的只读副本启用基于 GTID 的复制
-
如果数据库实例或任何只读副本使用了低于 8.0.26 的 RDS for MySQL 8.0.x 版本,请将数据库实例或只读副本升级为 8.0.26 或更高的 MySQL 8.0 版本。所有 RDS for MySQL 5.7 均支持基于 GTID 的复制。
有关更多信息,请参阅 升级 RDS for MySQL 数据库引擎。
-
(可选)重置 GTID 参数并测试数据库实例和只读副本的行为:
-
确保与数据库实例和每个只读副本关联的参数组将
enforce_gtid_consistency
参数设置为WARN
。有关使用参数组设置配置参数的更多信息,请参阅 Amazon RDS 的参数组。
-
如果更改了数据库实例的参数组,请重新引导数据库实例。如果更改了只读副本的参数组,请重新引导只读副本。
有关更多信息,请参阅“重启中的数据库实例”。
-
运行具有正常工作负载的数据库实例和只读副本并监控日志文件。
如果看到有关与 GTID 不兼容的事务的警告,请调整您的应用程序,以使其仅使用与 GTID 兼容的功能。在继续执行下一步之前,请确保数据库实例未生成有关与 GTID 不兼容的事务的任何警告。
-
-
为允许匿名事务的基于 GTID 的复制重置 GTID 参数,直到只读副本已处理所有这些事务。
-
确保与数据库实例和每个只读副本关联的参数组具有以下参数设置:
-
gtid_mode
–ON_PERMISSIVE
-
enforce_gtid_consistency
–ON
-
-
如果更改了数据库实例的参数组,请重新引导数据库实例。如果更改了只读副本的参数组,请重新引导只读副本。
-
-
等待复制所有匿名事务。要检查是否复制了这些事务,请执行以下操作:
-
在源数据库实例上运行以下语句。
SHOW MASTER STATUS;
记下
File
和Position
列中的值。 -
在每个只读副本上,使用上一步中的源实例上的文件和位置信息运行以下查询。
SELECT MASTER_POS_WAIT('
file
',position
);例如,如果文件名是
mysql-bin-changelog.000031
并且位置是107
,请运行以下语句。SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
如果只读副本超过指定的位置,查询将立即返回。否则,该函数将等待一段时间。在查询返回所有只读副本的结果时,请继续执行下一步。
-
-
仅重置基于 GTID 的复制的 GTID 参数。
-
确保与数据库实例和每个只读副本关联的参数组具有以下参数设置:
-
gtid_mode
–ON
-
enforce_gtid_consistency
–ON
-
-
重新引导数据库实例和每个只读副本。
-
-
在每个只读副本上,运行以下过程。
CALL mysql.rds_set_master_auto_position(1);