LMLPHP后院

MySQL 获取复制主服务器二进制日志坐标技术

maybe yes 发表于 2018-08-12 10:28

MySQL 主从同步配置,获取复制主服务器的二进制日志文件坐标。

配置服务器复制,必须提前确定主服务的当前二进制日志的坐标。从服务器启动复制进程的时候需要这些信息,从二进制日志中找到正确的点它才能启动处理事件。

在从服务想要开启复制进程开始同步前,如果主服务已经有数据,必须先停止在主服务上处理语句,然后获取当前二进制日志文件坐标并在主服务允许执行语句前导出数据如果不停止主服务执行语句,导出的数据和获取的主服务的状态信息会不匹配,最终数据不一致或者毁坏从服务的数据库

获取主服务的二进制日志坐标,如下步骤:

1. 在命令行开启一个会话连接到主服务,刷新所有表并阻止写入语句:

mysql> FLUSH TABLES WITH READ LOCK;

对于 InnoDB,FLUSH TABLES WITH READ LOCK 也会阻止事务的提交操作。保持命令行运行,锁定才会持续生效,一旦退出,锁定就会释放。如果是开启全新的主从复制组,可以释放读取锁。

2. 在主服务上开启另一个会话使用 SHOW MASTER STATUS 语句来确定当前二进制日志文件名称和位置:

mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 88       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

上面的执行结果中可以看出,File 列展示来日志文件名称,Position 列展示了文件的位置。他们代表了从服务以主服务开始处理更新复制的坐标。

如果主服务之前的运行没有开启二进制日志,日志文件名和位置的值通过 SHOW MASTER STATUS 或者 mysqldump --master-data 展示出来的将会是空的。这种情况下,后面要用到的指定从服务的日志文件和位置的值是空字符串 '' 和 4。

到这里,已经获取了从服务启动复制需要读取的二进制文件的正确的位置信息。

2024-12-22 11:01:47 1734836507 0.029043