mysql误删数据后 快速恢复的办法

Posted toooooop8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql误删数据后 快速恢复的办法相关的知识,希望对你有一定的参考价值。

手抖不小心把表里的数据删除或修改错误怎么办?该如何快速恢复呢?遇到这样的问题怎么办?希望下面这篇文章能够帮助到你!

第一步:保证mysql已经开启binlog,查看命令:

查看binklog是否开启

showvariableslike'%log_bin%';

查看binlog存放日志文件目录(如下图,博主binlog目录为/data/mysql):

showvariableslike'%datadir%';

值为OFF,需开启,值为ON,已开启。

如果没有开启binlog,也没有预先生成回滚SQL,那可能真的无法快速回滚了。对存放重要业务数据的MySQL,强烈建议开启binlog。

第二步:进入binlog文件目录,找出日志文件

第三步:切换到mysqlbinlog目录(当线上数据出现错误的时候首先可以询问具体操作人记录时间点,这个时候可以借助mysql自带的binlog解析工具mysqlbinlog,具体位置在mysql安装目录**/mysql/bin/下)

第四步:通过mysqlbinlog工具命令查看数据库增删改查记录(必须切换到mysqlbinlog目录才有效)

例子1:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操作日志,输入如下命令将数据写入到一个备用的txt文件中

例子2:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操作日志,并输出到屏幕上

例子3:查询2018-11-12 09:00:00到2018-11-13 20:00:00 数据库为 youxi 的操作日志,并且过滤出 只包括 template_coupon_tb_product_category 表数据的操作记录 ,输入如下命令将数据写入到一个备用的txt文件中

第五步:利用第四步输出的sql语句或者txt文本进行语句过滤,重新插入数据或更新数据

误删mysql数据后,如何通过mysql二进制日志恢复数据

问题出现!!!!!
由于程序内bug,导致关联子表数据被无辜删除了,数据库又没有备份,只能通过找到mysql日志来恢复了

mysql日志一般存放在server/data/目录下的 文件名为mysql-bin.*的文件内,如果你的没有那证明你的日志没有开启,那就没办法恢复了,如果不做mysql设置一般都是默认开启的

宝塔的日志文件存在于 /www/server/data/目录下

执行找回ssh命令

写 start-datetime 时间段区间找回,只写stop-datetime为在这个时间点前的数据
时间格式为 【YYYY-MM-DD HH:ii::ss】比如(2022-08-11 00:00:00)

/www/server/mysql/bin/mysqlbinlog --start-datetime="START" --stop-datetime="END" /www/server/data/mysql-bin.00* > /www/server/data/back.sql
/www/server/mysql/bin/mysqlbinlog  --stop-datetime="END" /www/server/data/mysql-bin.00* > /www/server/data/back.sql

找回后的sql文件一般无法直接导入,而且可能会参杂其他表的增删改查,会影响数据的完整性,所以我们要只提取我们需要的sql命令即可

  1. 提取Insert命令
sed -n '/^INSERT /,/;/p' /www/server/data/back.sql > new_back.sql
  1. 提取update命令
sed -n '/^UPDAETE /,/;/p' /www/server/data/back.sql > new_back.sql
  1. 提取delete命令
sed -n '/^DELETE /,/;/p' /www/server/data/back.sql > new_back.sql

当然也可以提取指定表,书写对应的正则即可

以上是关于mysql误删数据后 快速恢复的办法的主要内容,如果未能解决你的问题,请参考以下文章

误删mysql数据后,如何通过mysql二进制日志恢复数据

误删mysql数据后,如何通过mysql二进制日志恢复数据

误删mysql数据后,如何通过mysql二进制日志恢复数据

误删mysql数据后,如何通过mysql二进制日志恢复数据

MySQL数据文件被误删,如何进行恢复?

MySQL误删数据后切勿跑路