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命令即可
- 提取Insert命令
sed -n '/^INSERT /,/;/p' /www/server/data/back.sql > new_back.sql
- 提取update命令
sed -n '/^UPDAETE /,/;/p' /www/server/data/back.sql > new_back.sql
- 提取delete命令
sed -n '/^DELETE /,/;/p' /www/server/data/back.sql > new_back.sql
当然也可以提取指定表,书写对应的正则即可
以上是关于mysql误删数据后 快速恢复的办法的主要内容,如果未能解决你的问题,请参考以下文章