使用binlog拯救你被删除的数据库

正文索引 [隐藏]

# 使用binlog拯救你被删除的数据库

前言

宝塔的pma漏洞已经导致很多人被删了库,但是宝塔的binlog默认是开启的

所以你的数据可能还有救,本教程还适用于其他的情况,例如:误修改,误删除.

请随机应变,多参考几篇文件,数据无价.

开始

前排提示

前排提示:在操作前请备份binlog和数据文件

如有重要数据请联系专业人员

本博客将对您的任何操作概不负责

不保证100%成功

正文

首先查看/etc/my.cnflog-bin即为binlog的文件位置

首先搞来个测试的库,这里我导入的是图床的数据库

然后,全部删掉

现在库中已经空空如也了

之后我们连接到mysql的控制台

使用show master logs;来查看所有的binlog日志列表

mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     27678 |
| mysql-bin.000002 |   1141604 |
| mysql-bin.000003 |       264 |
| mysql-bin.000004 |       460 |
| mysql-bin.000005 |   1141683 |
| mysql-bin.000006 |       126 |
| mysql-bin.000007 |       126 |
| mysql-bin.000008 |    344662 |
+------------------+-----------+
8 rows in set (0.00 sec)

使用show master status;展示最新一个binlog日志的编号名称,及其最后一个操作事件结束点

之后我们退出控制台,来到binlog的目录(宝塔的默认为/www/server/data)

使用mysqlbinlog打开binlog文件

根据binlog导出数据库

  mysqlbinlog --no-defaults --base64-output=decode-rows -v \
 --start-position "开始位置" --stop-position "结束位置" \
 --database 库名  mysql-bin.000008 \
 > /home/test.sql

开始位置和结束位置是

# at 344480
#200824  8:20:17 server id 1  end_log_pos 344662        Query   thread_id=57    exec_time=0     error_code=0
use `img_www`/*!*/;
SET TIMESTAMP=1598257217/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=224,@@session.collation_server=45/*!*/;
DROP TABLE `img_images`,`img_imginfo`,`img_invite`,`img_options`,`img_storage`,`img_users` /* generated by server */
/*!*/;
DELIMITER ;

第一行中的数字

执行后可以看到已经导出来sql文件

之后直接使用

mysql -u 用户名 -p密码 库名 < 数据库文件

(建议使用root用户导入

不然可能遇到权限错误,例如

ERROR 1227 (42000) at line 9: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

如果你不能登入到root,那么就根据报错随机应变吧

导入成功!

再次查看我们的数据库,数据已经都回来了!

再次提醒:

如有重要数据请联系专业人员

本博客将对您的任何操作概不负责

不保证100%成功

一些建议

我们应该提前做好备份,使用类似b2,OSS之类的储存价格并不贵,而且数据有保障,

尽量不开可能影响安全的端口,做好系统安全配置.