误删MYSQL数据库数据丢失找回方法

简介:

  MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。当然了,使用binlog日志所恢复的数据只能是部分数据,并不能够使用binlog日志来做数据库的备份,如果想要做数据库备份,依然要使用我们传统的备份方法,而binlog可以作为增量备份。

docker部署的MySQL8.0.19

 

  • 在启动容器之前先要创建好要挂载出来的目录文件
  • 容器启动后,连接数据库

查看mysqlbinlog是否开启命令:

不清楚日志文件的名称可以使用

  • 在数据库中创建一个数据库、表,插入一些数据,就会在容器中的/var/lib/mysql目录下看到日志文件,或者是看挂载出来对应的目录上

挂载的目录:

通过binlog还原数据库

  • ##起始时间点
    ##结束时间点
    ##起始位置
    ##结束位置

// 将binlog日志文件关于tide库的sql转出到文件
mysqlbinlog binlog.000022 -d {database名称} > tide.sql

  • 误操作:
    • 情景1:删除了表中某一条数据
    • 行数:首先找到当天的binlog0000XX 文件,定位到删除操作在日志的行数
    • 使用 mysqlbinlog —start-position=XXXXX -- stop-position=XXXXX binlog.0000XX > XXXX.sql
    • 将sql中的delete操作改为insert,重新source 到数据中
    • 时间: 确定操作所在的时间区间
    • 使用mysqlbinlog —start-datetime=‘XXX’ —stop-datetime=‘XXX’ binlog.0000XX > XXXX.sql
    • 同上,将sql中的delete操作改为insert,重新source 到数据中
    • 情景2:清空数据库或者某一个表
    • 首先,找到删除/清除操作在哪个日志中,以及所在的位置
    • 不同于单个delete操作,改为insert后可以直接找回
    • truncate操作清空的数据比较多,需要从最初的日志文件一个个重新导入到数据库
    • 注意:
    • 如果mysqlbinlog 开启7天自动清除日志文件的话,数据就只能找回部分了
    • 定期备份是最好的办法
posted @ 2022-04-13 18:01  小猫多鱼  阅读(739)  评论(0编辑  收藏  举报
Live2D