mysqlbinlog--start-position
的和
--stop-position
选项
可用于指定日志位置
,而不是指定日期和时间
。它们与开始和结束日期选项的工作方式相同,只是您指定日志位置编号而不是日期。使用位置可以使您更精确地确定要恢复日志的哪一部分,尤其是在许多事务与破坏性 SQL 语句同时发生的情况下。要确定位置编号,
请在接近执行不需要的事务的时间范围内运行mysqlbinlog ,但将结果重定向到文本文件以供检查。这可以这样做:
$> mysqlbinlog --start-datetime="2005-04-20 9:55:00" \
--stop-datetime="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
此命令在
/tmp
目录中创建一个小文本文件,其中包含执行有害 SQL 语句时前后的 SQL 语句。使用文本编辑器打开此文件并查找您不想重复的语句。确定二进制日志中用于停止和恢复恢复的位置并记下它们。位置标记为
log_pos
后跟数字。恢复之前的备份文件后,使用位置编号处理二进制日志文件。例如,您将使用如下命令:
$> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 \
| mysql -u root -p
$> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 \
| mysql -u root -p
第一个命令恢复所有事务,直到给定的停止位置。第二个命令恢复从给定的起始位置到二进制日志末尾的所有事务。因为
mysqlbinlog的输出包含SET
TIMESTAMP
了每条记录的SQL语句之前的语句,所以恢复的数据和相关的MySQL日志反映了事务执行的原始时间。