要配置从属服务器在正确的位置开始复制过程,您需要在其二进制日志中记录主服务器的当前坐标。
警告
此过程使用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。记录这些值。稍后在设置从站时需要它们。它们表示从属服务器应开始处理主服务器的新更新的复制坐标。
如果主机已经运行以前没有二进制日志启用,日志文件的名称和位置值显示通过SHOW MASTER STATUS或mysqldump的–master数据将被清空。在这种情况下,以后指定从站的日志文件和位置时需要使用的值为空字符串(’’)和4。
现在,您具有使从属服务器能够在正确的位置开始从二进制日志中读取信息以开始复制的信息。
如果在开始复制之前已有现有数据需要与从属服务器同步,请让客户端保持运行状态,以便锁定保持不变,然后继续执行 第17.1.1.5节“使用mysqldump创建数据快照”或 第17.1节。 .1.6,“使用原始数据文件创建数据快照”。这里的想法是防止任何进一步的更改,以使复制到从站的数据与主站同步。
如果要设置全新的主复制和从复制组,则可以退出第一个会话以释放读取锁定。




