执行完整备份时是否可以获得实时mysql数据库的精确位置

use*_*258 5 mysql mysqldump backup mysqlbinlog

我有一个生产数据库,我通常每周运行一次完整备份。我为增量备份打开了 bin 日志。

生产服务器在西海岸,而营业时间在东海岸。

当我执行全备份时,我会查询主服务器的日志和位置。我将这些值放在我将数据库压缩到的 zip 文件名中。

我在使用 mysqlbinlog 从我知道备份已经结束的某个位置创建增量 sql 文件时遇到了困难。

运行Show Master Status然后运行mysqldump --flush-logs --single-transaction...就足以获得准确的信息以进行恢复。

我知道理想的设置是备份从属数据库,因为锁定不会损害生产环境,但目前我还没有进行切换。

因为我没有锁定所有表,所以我没有得到理想的结果吗?

提前致谢

编辑

在 RolandoMySQLDBA 的帮助下,我意识到我没有指向适当的 binlog 文件。我改为指向整个目录binlog/bin-log.[0-9]* > sql.txt。因此,仅使用该位置,我就可以击中比预期更早开始的日志。所以我更改了我的脚本以提取适当的 binlog 文件以及位置,这就像一个魅力。

谢谢

Rol*_*DBA 12

当您使用mysqldump 时,您可以获取mysqldump 启动时间点备份的二进制日志坐标。

只需添加--master-data 选项

mysqldump --master-data=2 --flush-logs --single-transaction...
Run Code Online (Sandbox Code Playgroud)

使用--master-data=2将以CHANGE MASTER TO命令的形式记录二进制日志文件名和位置 。它被记录为注释。

使用--master-data=1还将以CHANGE MASTER TO命令的形式记录二进制日志文件名和位置 。它不记录为注释,而是记录为重新加载 mysqldump 时将执行的命令。

在这两种情况下,您始终可以CHANGE MASTER TO在转储的第 23 行找到该命令。我之前在我的旧帖子MySQL Exec_Master_Log_Pos 值大于 Read_Master_Log_Pos标题“BUT WAIT ...”下提到了这一点

要从名为 的 mysqldump 文件中检索该行myfullbackup.sql,只需运行

head -23 myfullbackup.sql | tail -1 > MasterLogFilePos.sql
Run Code Online (Sandbox Code Playgroud)

CHANGE MASTER TO命令将在它

如果您运行 mysqldump

mysqldump --master-data=2 --flush-logs --single-transaction...
Run Code Online (Sandbox Code Playgroud)

Master 将继续允许读取和写入所有 InnoDB 表。