数据库误删恢复

删库后只能跑路吗?记录一次数据库误删恢复操作。

午睡刚醒,同事让给清空下测试数据库,揉揉睡意朦胧的眼睛,点了几下鼠标。突然意识到发生了什么不好的事情。

找到之前备份的数据库文件,最新的备份已经是几天前了,丢失了很多数据。为了找回数据要怎么做呢?

  1. 找到 binlog 文件。

    可以查看 mysql 配置文件 my.cnf 找到 binlog 存放位置。

  2. 使用 mysqlbinlog 将 binlog 文件转为 sql 格式。

    1
    mysqlbinlog  /var/log/mysql/mariadb-bin.001062 > mariadb-bin.001062.sql
  3. 找到丢失数据对应的 sql 语句重新执行。

注意事项:

  • mysql 要开启 binlog
  • 发生误删时应尽快停止服务,应立即将 binlog 文件移出,避免新的 log 写入。
  • 新的 log 会覆盖掉原来的 log,要注意上一次全量备份的时间,和 binlog 保存的最老数据的时间,可能丢失的数据多于 binlog 中记录的,这就无法恢复了。
  • mysqlbinlog 命令有很多参数,提供了很多便捷,比如可以指定时间、指定表名等等。
  • 可以从备份的数据库中找到对应的 binlog 文件位置以及行数。