自救措施:MySQL删库or删表or误删数据

Raizel ·
更新时间:2024-11-14
· 811 次阅读

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

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

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

show variables like 'log_%';

结果:
在这里插入图片描述
2.查看后发现未开启binlog,使用以下方法进行开启:
windowns 电脑则找到 my.ini
unix 系统找到 my.cnf文件

下面以windows为例,在[mysqld]进行如下配置:
在这里插入图片描述

#日志存储路径 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
在这里插入图片描述
在这里插入图片描述
方法③
重启服务
在这里插入图片描述

4.再次查看日志状态
在这里插入图片描述

删除某条数据

删除id=1的数据。
在这里插入图片描述
使用

show master status;

命令,并查看最新的 binlog 日志文件。
在这里插入图片描述
接着使用以下命令,获取删除之前,关于ID=1的最后一条操作记录。

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

在这里插入图片描述
最后使用以下命令进行回滚删除操作。

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

与单条数据不一样的是,对于表的偏移量,起始偏移量是创建表之前的开始偏移量,结束偏移量是删除数据库之前的最后一个结束偏移量。
在这里插入图片描述

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

在这里插入图片描述

删除数据库

在这里插入图片描述
同样,查看偏移量,执行类似上面的命令进行还原操作。


作者:puyuma



OR 数据 Mysql

需要 登录 后方可回复, 如果你还没有账号请 注册新账号