1 预期效果 使用binlog恢复数据的预期效果是将误删的数据还原到误删之前的状态,以减少或消除数据丢失的影响。通过正确解析和执行 binlog 中的操作记录,可以重新执行误删操作之后的插入、
1 预期效果使用 binlog 恢复数据的预期效果是将误删的数据还原到误删之前的状态,以减少或消除数据丢失的影响。通过正确解析和执行 binlog 中的操作记录,可以重新执行误删操作之后的插入、更新或删除操作,从而恢复被误删的数据。
需要注意的是,预期效果可能受到以下因素的影响:
2 实现原理binlog记录了数据库中的所有更改操作,以便在需要时进行数据恢复、主从复制和数据审计等操作。通过解析和分析binlog,可以还原数据库中的数据更改历史,并进行相应的操作,例如数据恢复或主从复制等 下面是使用 binlog 恢复数据的一般原理:
需要注意的是,使用 binlog 恢复数据存在一些限制和风险,包括:
3 实际操作3.1 查看自己的binlog日志是否打开在黑窗口中输入命令查看show variables like 'log_bin%' ; ,一般都是默认打开的
3.2 查看binlog文件通过上一步查询的log_bin_basename得到的路径打开存储binlog文件的文件夹 可以看到已经有很多log文件了 (这里我们是要测试binlog恢复数据的使用,所以就日志文件都放到一个全新binlog文件中方便查询使用,如果是实际恢复数据的话,就要一个一个的在这些binlog文件中找自己要的那部分文件了。) 3.3 模拟数据库在数据库中进行 flush logs 命令可以新创一个binlog文件,接下来的操作也就会放到新的文件中了。此时再进入到上面这个文件夹中就会看到又多了一个文件叫做LAPTOP-595LBSCH-bin.000092 假设我们的数据库是7天一备份,然后binlog的过期时间是大于7天的,那么通过备份的数据库+binlog文件就能够恢复数据库到达7天内的任意一个时间点的状态。,下面是一个模拟备份的行为 之后我们进行一些操作,模拟正常数据库操作
经过这些操作之后! 3.4 恢复操作实战现在的处境就是整个表都被删除了,我们想要实现将数据库改成王五刚被改成王伟的数据库的模样 我们要做的就是将上次备份的数据库恢复,然后从上次备份的时间点 - > 到王五刚被改成王伟的时间点 中的binlog操作都找到 1、我们在binlog所在的文件夹位置打开黑窗口,然后运行,(注意LAPTOP-595LBSCH-bin.000092是因为测试时候知道刚才的操作一定就在这个文件中,如果不知道就需要逐个打开多个binlog文件然后自己找你想要的那个时间点,) mysqlbinlog -v --set-charset=utf8mb4 LAPTOP-595LBSCH-bin.000092 > output.txt 之后通过打开这个output.txt文件可能有部分乱码(乱码自己解决,如果实在解决不了只能猜了。),比如找到这一部分,意思就是将王五改成王五的操作,他们的执行行数在1109 另一种办法就是在mysql中使用show binlog events in 'LAPTOP-595LBSCH-bin.000092';来查看binlog中的日志, 我们可以看到有4个数据,有写入数据,删除更新数据等,还有最后一个是drop table。 经过这些我们已经得到了想要的信息,数据库上次备份后的binlog开始时间应该是317也就是备份后的第一条ddl语句的begin时间,然后我们想要恢复到的时间是1109,日志文件的名字叫做LAPTOP-595LBSCH-bin.000092也就是更新王五那步操作的commit行,之后就是将这个时间段内binlog记录的操作都输入到备份的数据库中 下面这部操作是在不登陆mysql的黑窗口运行的, | mysql -uroot -p<数据库密码>的意思就是将前面步骤操作的结果输入到后面的命令中 mysqlbinlog --no-defaults --start-position=317 --stop-position=1109 LAPTOP-595LBSCH-bin.000092 | mysql -uroot -p<数据库密码> 此时打开数据库就会发现,数据库已经成功恢复到了删表之前的状态了。 |
2021-06-02
2021-06-05
2022-06-27
2024-02-19
2022-10-12