记录一下今天下午的谜之操作,不小心把数据库给删除掉了,而且没有备份,差点真是删库跑路了。(一切源于一言难尽),我的案例是在宝塔环境下面执行的,所以仅供参考。
第一步:登录数据库,查看是否开启了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文件,右键运行。(建议这个操作)
运行完成以后,你打开数据库,本地启动项目检测一下数据是否完全恢复了。



