要配置副本以在正确的点开始复制过程,您需要注意源当前在其二进制日志中的坐标。
该过程使用 FLUSH TABLES WITH READ LOCK
,该命令阻止 COMMIT
操作对于 InnoDB
表。
如果您计划关闭源以创建数据快照,可以跳过该过程,而是将二进制日志索引文件的副本与数据快照一起存储。在那种情况下,源在重新启动时创建新的二进制日志文件。因此,副本必须从源的二进制日志坐标开始复制过程,即新的二进制日志文件的开头,该文件是源上紧跟在复制的二进制日志文件之后的文件。
要获取源二进制日志坐标,请按照以下步骤操作:
-
在源上启动会话,使用命令行客户端连接到源,然后使用
FLUSH TABLES WITH READ LOCK
语句刷新所有表并阻止写入语句:mysql> FLUSH TABLES WITH READ LOCK;
Warning请保持客户端运行,以便读锁保持有效。如果您退出客户端,锁将被释放。
-
在源上的另一个会话中,使用
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 节,“使用新源和副本设置复制” 以了解如何继续操作。