背景
1、数据库版本 5.7.36,由于误操作删掉了表的所有数据,但是数据库备份每天凌晨进行、只能从备份恢复昨日的全量数据,当日的数据将会丢失
查看binlog配置
binlog配置
[mysqld]
#设置日志三种格式:STATEMENT、ROW、MIXED 。
binlog_format = row
#设置日志路径,注意路经需要mysql用户有权限写,这里可以写绝对路径,也可以直接写mysql-bin(后者默认就是在/var/lib/mysql目录下)
log-bin = /var/lib/mysql/mysql-bin.log
#设置binlog清理时间
expire_logs_days = 7
#binlog每个日志文件大小
max_binlog_size = 100m
#binlog缓存大小
binlog_cache_size = 4m
#最大binlog缓存大小
max_binlog_cache_size = 512m
#配置serverid
server-id=1
尝试恢复
1、找到binlog文件
误删除后立即刷新binlog flush logs
2、binlog转sql
mysqlbinlog --start-datetime="2024-08-14 00:00:00" --stop-datetime="2024-08-14 23:59:59" /var/lib/mysql/mysql-bin.000002 -v > test2.sql
3、查看sql
找到对应的误操作之前的insert update等sql重新执行即可恢复当日未备份前的数据。
注意:此时binlog_format = mixd
补充
1、
binlog_format = row
这个参数很重要
2、为row时、会将delete from table where id > 5
记录为多条sqldelete from table where id = 6,delete from table where id = 7
、而不是原始的sql
3、借助其他工具转换为sql
参考博客
https://www.cnblogs.com/lkj371/p/15177266.html
借助工具将binlog解析为可视化sql、完成数据恢复