为了配置副本在正确的点启动复制进程,你需要注意源服务器binary log的当前坐标。
Warning
该过程使用带读取锁的FLUSH TABLES,这回阻塞InnoDB表的COMMIT操作。
如果你正准备停止源服务器来创建数据快照,您可以可选地跳过此过程,而将二进制日志索引文件的副本与数据快照一起存储。在那种情景下,源会在重新启动时创建一个新的二进制日志文件。副本开始复制进程时源的binary log坐标当然也就是新文件的开始,该新文件是源上的下一个二进制日志文件,位于复制的二进制日志索引文件中列出的文件之后。
为获得源二进制日志坐标,遵循以下步骤:
- 使用命令行客户端连接到源来启用一个新的session,并且通过执行FLUSH TABLES WITH READ LOCK语句来刷新所有的表和阻塞写语句:
mysql> FLUSH TABLES WITH READ LOCK;
Warning
使发出FLUSH TABLES语句的客户端保持运行状态,以使读取锁定保持有效。 如果退出客户端,则锁定将被释放。 - 在源上一个不同的session中,使用SHOW MASTER STATUS语句确定当前的二进制日志文件名和位置:
File列显示了日志文件的名字,Position列显示该文件内的位置。在这个例子中,binary log文件是mysql-bin.000003并且位置是73.记录下这些值。一会当你设置副本的时候你会用到它们。它们代表复制坐标,副本应从该坐标开始处理源中的新更新。
如果源禁用binary log日志记录并已经运行,通过SHOW MASTER STATUS或者mysqldump --master-data命令显示的日志文件名和位置的值将会是空的。那种情景下,之后指定源的二进制日志文件和位置时需要使用的值会为空字符串(’’)和4。
现在,你有了使副本能够在正确的位置开始从源的二进制日志开始读取所需的信息,来开始复制。
下一步取决于你在源上是否有数据存在。选择下面选项的一个:
如果你有需要在开始复制之前与副本同步的现有数据,请使客户端保持运行状态,以便将锁保留在适当的位置。这样可以防止进行任何进一步的更改,从而使复制到副本的数据与源同步。 进入第17.1.2.5节“选择数据快照的方法”。
如果要设置新的源和副本组合,则可以退出第一个会话以释放读取锁。 有关如何进行操作,请参见第17.1.2.6.1节“使用新的源和副本设置复制”。