mysql误删几行数据如何恢复?

binlog日志格式

通过参数 binlog_format 参数的值,可以设置 binlog 的格式,可选值有 statement、row、mixed

statement 格式:记录数据库执行的原始 SQL 语句
row 格式:记录具体的行的修改,这个为目前默认值
mixed 格式:因为上边两种格式各有优缺点,所以就出现了 mixed 格式

查看当前日志格式

show variables like 'binlog_format';
image.png

查询binlog 存放位置

show VARIABLES like 'datadir';
image.png

导出binlog日志,用于分析和排查sql语句

mysqlbinlog  --no-defaults  --base64-output=decode-rows  -v -v -v ./mysql-bin.000004  >   ./record.txt 
cat ./record.txt  |awk -F '[/*]+' '{print $1}' >./record1.txt

查找创建 knowledge的位置

3662923


image.png

找到误删语句之前的position

8323053


image.png

导出需要恢复的sql文件

这里注意不要加 base64-output=decode-rows 参数
这是我们解析 binlog 日志时使用的命令,我们可以很直观的分析 binlog 日志。
但是我们想要恢复到数据库中的时候,不能使用--base64-output=decode-rows 参数,否则是无法恢复到数据库的。

mysqlbinlog --no-defaults  -v \
 --start-position "3662923" --stop-position "8323053"  \
 --database knowledge  mysql-bin.000004 \
 > /var/lib/mysql/backup05.sql;

删除knowledge 数据库

drop database knowledge;

使用sql进行恢复

mysql -u root -p < /var/lib/mysql/backup05.sql
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容