要将副本配置为在正确的点开始复制过程,您需要在其二进制日志中记录源的当前坐标。
此过程使用FLUSH TABLES WITH
READ LOCK
, 它会阻止
COMMIT
对
InnoDB
表的操作。
如果您计划关闭源以创建数据快照,您可以选择跳过此过程,而是将二进制日志索引文件的副本与数据快照一起存储。在这种情况下,源在重新启动时创建一个新的二进制日志文件。因此,副本必须启动复制过程的源的二进制日志坐标是该新文件的开始,它是源上的下一个二进制日志文件,紧随复制的二进制日志索引文件中列出的文件之后。
要获取源的二进制日志坐标,请执行以下步骤:
通过使用命令行客户端连接到源来启动源会话,并通过执行以下语句刷新所有表和块写入
FLUSH TABLES WITH READ LOCK
语句:mysql> FLUSH TABLES WITH READ LOCK;
警告使发出
FLUSH TABLES
语句的客户端保持运行状态,以便读取锁定保持有效。如果退出客户端,则锁被释放。在源上的不同会话中,使用
SHOW MASTER STATUS
语句确定当前二进制日志文件名和位置:mysql > SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 73 | test | manual,mysql | +------------------+----------+--------------+------------------+
该
File
列显示日志文件的名称,该Position
列显示文件中的位置。在这个例子中,二进制日志文件是mysql-bin.000003
,位置是73。记录这些值。稍后在设置副本时需要它们。它们表示复制坐标,副本应在该坐标开始处理来自源的新更新。如果源之前在没有启用二进制日志记录的情况下运行,则 mysqldump --master-data 显示的日志文件名和位置
SHOW MASTER STATUS
值为空。在这种情况下,稍后在指定源的日志文件和位置时需要使用的值是空字符串 (''
) 和4
。
您现在拥有了使副本能够在正确的位置开始从二进制日志读取以开始复制所需的信息。
下一步取决于源上是否有现有数据。选择以下选项之一:
如果您有现有数据需要在开始复制之前与副本同步,请让客户端保持运行,以便锁定保持不变。这可以防止进行任何进一步的更改,以便复制到副本的数据与源同步。继续 第 16.1.2.4 节,“选择数据快照的方法”。
如果您正在设置新的复制拓扑,则可以退出第一个会话以释放读锁。有关如何继续的信息,请参阅 第 16.1.2.5.3 节,“在新源和副本之间设置复制”。