如何从二进制文件中获取 MySQL 二进制日志坐标?

Kry*_*ten 6 mysql replication mysqlbinlog

我正在尝试为大型(120 GB)MySQL 数据库设置复制,但我搞砸了。

我关闭了 master,复制了数据文件,然后重新启动了 master。现在我已经设置了奴隶并启动了它,我意识到我忽略了获取MASTER_LOG_FILEMASTER_LOG_POS设置复制所需值。

我仍然有一份未受影响的数据文件副本。有没有办法从这些文件中确定MASTER_LOG_FILEMASTER_LOG_POS

相关问题:

  • 如果你设置了会发生什么 MASTER_LOG_POS为较早的时间点?
  • 假设将执行重复查询,可能导致重复数据,我是否正确?

编辑

我一直在调查该mysqlbinlog命令,并通过执行以下命令发现了正确的信息:

mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
    mysql-bin.000006 | grep end_log_pos
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

... a whole bunch more lines ...

#150621 20:10:21 server id 1  end_log_pos 720159843     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720161877     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720162762     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164796     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164815     Stop
Run Code Online (Sandbox Code Playgroud)

我猜我应该使用最后两个位置之一,但我不确定哪个。

Rol*_*DBA 5

希望您还没有在从站上启动 mysqld。

碰巧一个 binlog 位置也是每个 binlog 事件结束时的 binlog 大小。在你的情况下,你可以使用奴隶看到的最后一个二进制日志,我可以假设是mysql-bin.000006. 获取文件大小并将其用作位置。

因此,在 Slave 上,您将运行

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST='...',
    MASTER_PORT=3306,
    MASTER_USER='repluser',
    MASTER_PASSWORD='replpassword',
    MASTER_LOG_FILE='mysql-bin.00006',
    MASTER_LOG_POS=720164815;
START SLAVE;
Run Code Online (Sandbox Code Playgroud)

那应该这样做!!!

我之前讨论过二进制日志位置是文件大小

你还问

如果将 MASTER_LOG_POS 设置为较早的时间点会发生什么?

是的,它会重播那些 binlog 事件并导致问题。