mysql二进制日志时间_mysql8 参考手册--使用二进制日志进行时间点(增量)恢复...

时间点恢复是指恢复自给定时间点以来所做的数据更改。通常,这种类型的恢复是在还原完整备份后执行的,该备份将使服务器在进行备份时进入其状态。(可以通过几种方式进行完全备份,例如第7.2节“数据库备份方法”中列出的 方式。)然后,时间点恢复将使服务器从完全备份时起逐步更新到最新状态、最近的时间。

注意

这里的许多示例都使用mysql 客户端来处理mysqlbinlog生成的二进制日志输出 。如果您的二进制日志包含 \0(空)字符,则除非使用该选项调用它,否则 mysql无法解析该输出--binary-mode。

时间点恢复的信息源是一组增量备份,这些增量备份由在完全备份操作之后生成的二进制日志文件表示。因此,必须使用--log-bin 启用二进制日志记录的选项启动服务器(请参见 第5.4.4节“二进制日志”)。

要从二进制日志还原数据,必须知道当前二进制日志文件的名称和位置。默认情况下,服务器在数据目录中创建二进制日志文件,但是可以使用--log-bin 选项将路径名指定为将文件放置在其他位置。 第5.4.4节“二进制日志”。

要查看所有二进制日志文件的列表,请使用以下语句:

mysql>SHOW BINARY LOGS;

要确定当前二进制日志文件的名称,请发出以下语句:

mysql>SHOW MASTER STATUS;

该mysqlbinlog可以实用的二进制格式的二进制日志文件中的事件转换为文本,以便他们可以执行或查看。mysqlbinlog具有用于根据事件时间或事件在日志中的位置选择二进制日志部分的选项。请参见 第4.6.8节“ mysqlbinlog-用于处理二进制日志文件的实用程序”。

从二进制日志执行事件会导致重做它们代表的数据修改。这样可以恢复给定时间范围内的数据更改。要执行二进制日志中的事件,请使用mysql客户端处理mysqlbinlog输出 :

shell>mysqlbinlog binlog_files | mysql -u root -p

如果二进制日志文件已经过加密(可以从MySQL 8.0.14开始执行),则mysqlbinlog无法像上面的示例一样直接读取它们,但是可以使用--read-from-remote-server (-R)选项从服务器读取它们 。例如:

shell>mysqlbinlog --read-from-remote-server --host=host_name --port=3306 --user=root --password --ssl-mode=required binlog_files | mysql -u root -p

在这里,该选项--ssl-mode=required已用于确保二进制日志文件中的数据在传输中受到保护,因为该数据是以未加密的格式发送到 mysqlbinlog的。

当需要在执行事件之前确定事件时间或位置以选择部分日志内容时,查看日志内容会很有用。要从日志中查看事件,请将mysqlbinlog输出发送 到分页程序中:

shell>mysqlbinlog binlog_files | more

或者,将输出保存在文件中,然后在文本编辑器中查看文件:

shell>mysqlbinlog binlog_files > tmpfile

shell>... edit tmpfile ...

将输出保存在文件中对于在删除某些事件(例如意外事件)时执行日志内容的准备工作很有用DROP DATABASE。您可以从文件中删除任何不执行的语句,然后再执行其内容。编辑文件后,执行以下内容:

shell>mysql -u root -p < tmpfile

如果要在MySQL服务器上执行多个二进制日志,那么安全的方法是使用与服务器的单个连接来处理它们。这是一个示例,说明什么可能是不安全的:

shell>mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!

shell>mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

如果第一个日志文件包含一条CREATE TEMPORARY TABLE语句,第二个日志包含使用临时表的语句,则使用与服务器的不同连接以这种方式处理二进制日志会导致问题 。当第一个 mysql进程终止时,服务器删除临时表。当第二个mysql进程尝试使用该表时,服务器报告“ 未知表”。”

为避免出现此类问题,请使用单个 连接执行要处理的所有二进制日志的内容。这是一种方法:

shell>mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

另一种方法是将所有日志写入单个文件,然后处理该文件:

shell>mysqlbinlog binlog.000001 > /tmp/statements.sql

shell>mysqlbinlog binlog.000002 >> /tmp/statements.sql

shell>mysql -u root -p -e "source /tmp/statements.sql"

从包含GTID的二进制日志中读回时写入转储文件时(请参见第17.1.3节“使用全局事务标识符进行复制”),请将该--skip-gtids选项与 mysqlbinlog一起使用,如下所示:

shell>mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sql

shell>mysqlbinlog --skip-gtids binlog.000002 >> /tmp/dump.sql

shell>mysql -u root -p -e "source /tmp/dump.sql"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值