数据库误删恢复
删库后只能跑路吗?记录一次数据库误删恢复操作。
午睡刚醒,同事让给清空下测试数据库,揉揉睡意朦胧的眼睛,点了几下鼠标。突然意识到发生了什么不好的事情。
找到之前备份的数据库文件,最新的备份已经是几天前了,丢失了很多数据。为了找回数据要怎么做呢?
找到 binlog 文件。
可以查看 mysql 配置文件 my.cnf 找到 binlog 存放位置。
使用 mysqlbinlog 将 binlog 文件转为 sql 格式。
1
mysqlbinlog /var/log/mysql/mariadb-bin.001062 > mariadb-bin.001062.sql
找到丢失数据对应的 sql 语句重新执行。
注意事项:
- mysql 要开启 binlog
- 发生误删时应尽快停止服务,应立即将 binlog 文件移出,避免新的 log 写入。
- 新的 log 会覆盖掉原来的 log,要注意上一次全量备份的时间,和 binlog 保存的最老数据的时间,可能丢失的数据多于 binlog 中记录的,这就无法恢复了。
- mysqlbinlog 命令有很多参数,提供了很多便捷,比如可以指定时间、指定表名等等。
- 可以从备份的数据库中找到对应的 binlog 文件位置以及行数。