要将副本配置为在正确的时间点开始复制过程,您需要记下源在其二进制日志中的当前坐标。
此过程使用 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 节 “使用新的源和副本设置复制”。