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 表。