要将副本配置为在正确的点开始复制过程,您需要在其二进制日志中记录源的当前坐标。
此过程使用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
.
您现在拥有了使副本能够在正确的位置开始从二进制日志读取以开始复制所需的信息。
如果您有现有数据需要在开始复制之前与副本同步,请让客户端保持运行以便锁定保持不变,然后继续 第 17.1.1.5 节,“使用 mysqldump 创建数据快照”,或 第 17.1 节.1.6,“使用原始数据文件创建数据快照”。这里的想法是防止任何进一步的更改,以便复制到副本的数据与源同步。
如果你正在设置一个全新的源和副本复制组,你可以退出第一个会话来释放读锁。