数据库被删除了,如何恢复

Posted @Kerry~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库被删除了,如何恢复相关的知识,希望对你有一定的参考价值。

记录一下今天下午的谜之操作,不小心把数据库给删除掉了,而且没有备份,差点真是删库跑路了。(一切源于一言难尽),我的案例是在宝塔环境下面执行的,所以仅供参考。

第一步:登录数据库,查看是否开启了binlog日志

[root@iZwz9cir5blv91u0r6eyboZ ~]# mysql -u root -p
Enter password: ****
mysql> SHOW VARIABLES LIKE 'LOG_BIN%';
+---------------------------------+----------------------------------+
| Variable_name                   | Value                            |
+---------------------------------+----------------------------------+
| log_bin                         | ON                               |
| log_bin_basename                | /www/server/data/mysql-bin       |
| log_bin_index                   | /www/server/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                              |
| log_bin_use_v1_row_events       | OFF                              |
+---------------------------------+----------------------------------+
5 rows in set (0.00 sec)

mysql> show master logs; # 查看日志文件
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000007 |   5476353 |
| mysql-bin.000008 |       167 |
| mysql-bin.000009 |       143 |
| mysql-bin.000010 |       143 |
| mysql-bin.000011 |  45125413 |
+------------------+-----------+
5 rows in set (0.00 sec)


mysql> show master status; # 查看最后更新日志文件 一般都是用于恢复
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000011 | 45164856 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

 log_bin为on 就是开启状态,off 就是关闭状态。(宝塔默认是开启的)

如果你的数据库开处于关闭状态建议你马上开启。

# 找到你的mysql 配置文件 添加下面三行
log_bin=ON
log_bin_basename=/var/lib/mysql/mysql-bin   # 日志存储地址
log_bin_index=/var/lib/mysql/mysql-bin.index  # 日志索引存储地址

# 重启mysql服务

三个参数来指定,

第一个参数是打开binlog日志 on

第二个参数:binlog日志存储地方以及命名

第三个参数:binlog文件的索引文件

还有一种简单的配置 就是把 log-bin=mysql-bin

#在数据库配置文件中添加,log-bin = 数据库命令执行目录的bin中
log-bin=mysql-bin # /var/lib/mysql/mysql-bin

第二步:利用使用 mysqlbinlog工具 提取 binlog 内容

 由于binlog日志是二进制的,所以是无法查看的,需要借助 mysqlbinlog工具进行提取操作。

# 进入到
cd  /www/server/data/

[root@iZwz9cir5blv91u0r6eyboZ data]# ll
total 649792
-rw-rw---- 1 mysql mysql   5476353 Apr 29 16:04 mysql-bin.000007
-rw-rw---- 1 mysql mysql       167 Apr 29 16:06 mysql-bin.000008
-rw-rw---- 1 mysql mysql       143 Apr 29 16:09 mysql-bin.000009
-rw-rw---- 1 mysql mysql       143 Apr 29 16:26 mysql-bin.000010
-rw-rw---- 1 mysql mysql  45111211 Sep 24 16:16 mysql-bin.000011
-rw-rw---- 1 mysql mysql        95 Apr 29 16:27 mysql-bin.index


以 mysql-bin 命名的就是 binlog文件了。

# 查看 mysqlbinlog 工具所在的位置
[root@iZwz9cir5blv91u0r6eyboZ log]# find / -name mysqlbinlog
/www/server/mysql/bin/mysqlbinlog

# 查看日志文件
[root@iZwz9cir5blv91u0r6eyboZ log]/www/server/mysql/bin/mysqlbinlog
/www/server/data/mysql-bin.000007

# 执行提取文件命令
# 语法 mysqlbinlog  -v --base64-output=decode-rows  
--start-datetime='开始时间' 
--stop-datetime = '结束时间' 
-d '数据库名称' 日志文件 > 写入的sql文件


/www/server/mysql/bin/mysqlbinlog -v --base64-output=decode-rows
 --start-datetime='2021-08-03 11:00:00'
--stop-datetime='2021-09-24 16:50:00'
-d 'card' /www/server/data/mysql-bin.000011 > /home/log/data_3.sql



# 参数说明
方式一、按照时间提取(一般都是按照这个方式筛选)
--start-datetime 指定开始日期
--stop-datetime  指定结束时间

方式二、按照文件的行数提取

--start-position(指定开始位置,恢复到此位置之后的数据,包括此位置)

--stop-position(指定结束位置,恢复此位置之前的数据,不包括此位置)

-d 指定库

-v --base64-output=decode-rows
# 看得到dml语句具体做了什么操作(例如:insert时具体插入了什么数据)
# 看不到dml语句的完整sql语句(例如:insert into t1(id) values(1);)
# 看不到dml语句的"伪"sql语句 无所谓的

-vv --base64-output=decode-rows
# 看得到dml语句具体做了什么操作(例如:insert时具体插入了什么数据)
# 看得到dml语句的完整sql语句(例如:insert into t1(id) values(1);),但是被注释掉了的;
# 看不到dml语句的"伪"sql语句 无所谓的这个

# 导出文件以后,下载sql文件,然后打开

打开文件后的样子

 本质就是一个sql文件,一些create 操作。搜索一下  drop database 关键字,把有关删除操作的sql 语句全部去掉, 直接下来在本地导入运行sql文件 测试。

可以使用source 命令进行导入操作

source C:/Users/Administrator/Desktop/card_3.sql;

也可以使用phpstorm 打开sql文件,右键运行。(建议这个操作)

 运行完成以后,你打开数据库,本地启动项目检测一下数据是否完全恢复了。

以上是关于数据库被删除了,如何恢复的主要内容,如果未能解决你的问题,请参考以下文章

被删除的临时文件如何还原到删除前的文件件下?

如何恢复磁盘中被删除的数据

MySQL数据文件被误删,如何进行恢复?

oracle 如何恢复误删的表记录数据

git 删除分支如何恢复

数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库