要将副本配置为从正确的位置开始复制过程,您需要记录源在其二进制日志中的当前坐标。
此过程使用 FLUSH TABLES WITH READ LOCK
,它会阻塞 COMMIT
操作,针对 InnoDB
表。
如果您计划关闭源以创建数据快照,您可以选择跳过此过程,而是将二进制日志索引文件的副本与数据快照一起存储。在这种情况下,源在重新启动时创建一个新的二进制日志文件。因此,副本必须开始复制过程的源二进制日志坐标是该新文件的开头,即复制的二进制日志索引文件中列出的文件后的下一个二进制日志文件。
要获取源二进制日志坐标,请执行以下步骤
通过使用命令行客户端连接到源,在源上启动一个会话,并通过执行
FLUSH TABLES WITH READ LOCK
语句刷新所有表并阻塞写入语句mysql> FLUSH TABLES WITH READ LOCK;
警告保持您发出
FLUSH TABLES
语句的客户端处于运行状态,以便读锁保持有效。如果您退出客户端,锁将被释放。在源上的另一个会话中,使用
SHOW BINARY LOG STATUS
语句确定当前二进制日志文件名和位置mysql> SHOW BINARY LOG STATUS\G *************************** 1. row *************************** File: mysql-bin.000003 Position: 73 Binlog_Do_DB: test Binlog_Ignore_DB: manual, mysql Executed_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 1 row in set (0.00 sec)
File
列显示日志文件名,而Position
列显示文件中的位置。在此示例中,二进制日志文件为mysql-bin.000003
,位置为 73。记录这些值。您在设置副本时需要它们。它们表示副本应开始处理来自源的新更新的复制坐标。如果源先前一直运行但二进制日志记录已禁用,则
SHOW BINARY LOG STATUS
或 mysqldump--source-data
显示的日志文件名和位置值为空。在这种情况下,您在以后指定源的二进制日志文件和位置时需要使用的值是空字符串 (''
) 和4
。
您现在已拥有使副本能够从正确的位置开始从源的二进制日志中读取以启动复制所需的信息。
下一步取决于源上是否存在现有数据。选择以下选项之一
如果您在开始复制之前有需要与副本同步的现有数据,请保持客户端运行,以便锁保持在位。这将阻止任何进一步的更改,以便复制到副本的数据与源数据同步。请继续访问第 19.1.2.5 节,“选择数据快照方法”。
如果您正在设置新的源和副本组合,则可以退出第一个会话以释放读锁。请参阅第 19.1.2.6.1 节,“使用新源和副本设置复制”了解如何继续。