数据库被删除了,如何恢复
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文件,右键运行。(建议这个操作)
运行完成以后,你打开数据库,本地启动项目检测一下数据是否完全恢复了。
以上是关于数据库被删除了,如何恢复的主要内容,如果未能解决你的问题,请参考以下文章