想要自救成功,binlog一定要用好。
mysql-binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。


目录

  • 准备工作
  • 删除某条数据
  • 删除数据表
  • 删除数据库


准备工作

1.首先确认数据库是否已开启binlog。

show variables like 'log_%';

结果:

Mysql 误删数据 mysql误删数据库未开启binlog_误删数据


注意:最后送大家十套2020最新Java架构实战教程+大厂面试题库,进裙 783802103 在裙文件下载一起交流进步哦!

2.查看后发现未开启binlog,使用以下方法进行开启:

windowns 电脑则找到 my.ini
unix 系统找到 my.cnf文件
下面以windows为例,在[mysqld]进行如下配置:

Mysql 误删数据 mysql误删数据库未开启binlog_Mysql 误删数据_02

#日志存储路径
log-bin=mysql-bin
#日志格式
binlog-format=mixed

binlog-format 有三种方式:
① STATEMENT模式(SBR):
每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
② ROW模式(RBR):
不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
③ MIXED模式(MBR):
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

3.重启数据库

方法①

service mysqld restart

方法②

在运行中先stop在start

Mysql 误删数据 mysql误删数据库未开启binlog_Mysql 误删数据_03


Mysql 误删数据 mysql误删数据库未开启binlog_误删数据_04


方法③

重启服务

Mysql 误删数据 mysql误删数据库未开启binlog_Mysql 误删数据_05

4.再次查看日志状态

Mysql 误删数据 mysql误删数据库未开启binlog_还原数据库_06

删除某条数据

删除id=1的数据。

Mysql 误删数据 mysql误删数据库未开启binlog_mysql_07


使用

show master status;

命令,并查看最新的 binlog 日志文件。

Mysql 误删数据 mysql误删数据库未开启binlog_mysql_08


接着使用以下命令,获取删除之前,关于ID=1的最后一条操作记录。

show binlog events in 'mysql-bin.000001';

Mysql 误删数据 mysql误删数据库未开启binlog_Mysql 误删数据_09


最后使用以下命令进行回滚删除操作。

mysqlbinlog --no-defaults --start-position=639 --stop-position=928 D:\mysql-bin.000001 | mysql -uroot -p

删除数据表

与单条数据不一样的是,对于表的偏移量,起始偏移量是创建表之前的开始偏移量,结束偏移量是删除数据库之前的最后一个结束偏移量。

Mysql 误删数据 mysql误删数据库未开启binlog_Mysql 误删数据_10

mysqlbinlog --no-defaults --start-position=120 --stop-position=2537 D:\mysql-bin.000001 | mysql -uroot -p

Mysql 误删数据 mysql误删数据库未开启binlog_binlog_11

删除数据库

Mysql 误删数据 mysql误删数据库未开启binlog_mysql_12


 

同样,查看偏移量,执行类似上面的命令进行还原操作。