前言:
前段时间做一个网站,手贱把服务器上的网站数据库给删了,这可吓坏哥了 (ಥ _ ಥ)~,第一时间是赶紧百度,看有没有教程恢复回来。结果悲催,百度半天没找到有用的(╥╯^╰╥)~,跑去问各路大神,大神回复让我目瞪口呆(⊙o⊙)… 数据库,从删除到跑路!(Φ皿Φ)~ 第一天,没能修复,找到一些方法,没敢尝试,怕越捣鼓越乱,第二天,开始着手,跟着一篇文章介绍慢慢地修复了(毕竟不能拖~)
数据库 删除后,恢复流程记录:
首先:进入 -> #cd /etc/my.cnf 文件里 查看 是否添加了 “log-bin=mysql-bin”
log-bin=mysql-bin //查找这句,很重要。没有这句,就不能用binlog 来修复了
数据库恢复流程:
1.开始之前 先备份文件:
mysql/data/
这个备份到其他目录下
cp /mysql/data /home // 拷贝 /mysql/目录下的 data 文件 到/home目录下
(记住每次操作都需要备份一下,免得出错后。没地方哭~ ╮(╯▽╰)╭)
如果是在外部拷贝: /alidata/server/mysql 下
cp data /home/data123 // cp 是拷贝命令,后面需拷贝文件, 最后面参数是路径 "data123" 重命名文件
最好是重命名,不要跟之前备份的文件冲突
2.binlog 日志恢复法:
nysqlbinlog mysql-bin.000002 > tmp.sql // 把 mysql-bin.000002 这个日志 导出到tmp.sql 文件
3.然后编辑 tmp.sql, 找到 delete (drop)的 那步操作,将之删除
如: vim tmp.sql // 进入编辑
DROP DATABASE `XXXX` // 直接删除这句
我这里是这样显示的:
(最好是下载到本地更改,方便。更重要的是防止对数据库的二次伤害 ╮(╯﹏╰)╭)
从服务器上下载 文件操作 (SHH 命令):
sz + 文件名
然后我根据百度,尝试这样操作(结果不行,每个人的方法都不一样o(╯□╰)o):
mysql backup <tmp.sql // 把操作导入数据库 -- 我试了,在我这里没有备份,用不了backup
4.然后我是尝试这样做的:
在本地打开 tmp.sql 文件 (选择合适的编辑器,我是用VS Code 打开的)
找到关于创建你已删除数据库的地方(drop database xxx), 先把这句给删除了。
然后是在最上面找到你开始创建这个数据库的地方(create database xxx), (从这里开始)
再找到 你创建另一个数据库的地方(create database xxx123),(到这里结束,不需要这一行)
// 从这里开始
create database xxx // 你删除的数据库
......
......
// 到这里结束
create database xxx123 // 另一个数据库 创建的位置
复制这两行数据之间的这段代码,并保存到另一个文件(可以直接保存为 你的数据库名.txt,或者xxx.sql文件)
然后是,进入到数据库,再导入你保存的这个文件 就可以了。就相当于重新创建了一个数据库(误删的数据库)
(这过程可能会有出错的地方导致恢复的数据不完全,但起码恢复了部分数据了) <( ̄▽ ̄)/~
我是在PHPMyadmin 里导入数据库文件的,可以修复部分文件.(百分百修复回来 一般是很难的, 将就一下吧!)
更新:
恢复的数据少了一个表,导致网站连接不了数据库,打不开网站。然后我参考 从binlog 导出的数据文件,找到相应的 创建该表名的地方,重新建一个表, 可能还需要重新导入数据,参考创建该表面下面的代码,找到 insert into xxx(缺少的表名) ,一步步重新添加 数据即可。
后记:
如果可以拿到阿里云服务账号的话,可以直接从云服务上尝试能不能修复(一般来说云服务上是有备份的),当然如果你平时在服务器上有做数据备份的话,就更好了,直接从从备份数据上修复就好了。(⊙o⊙)~
备注:数据库里的东西,操作千万要谨慎!!!在做各种操作之前,最好做个备份!!!
温馨提示:
数据库有风险,操作需谨慎!
数据库从删除到跑路 (不能修复就跑路吧~ ╮(╯▽╰)╭)
数据库从删除到修复 (如果有技术,就修复吧。还好我删除的数据库,数据不是很大,不然修复起来就麻烦了╮(╯_╰)╭)
参考资料:
http://www.cnblogs.com/mqxs/p/6020341.html (这个比较有用,对我而言~)
http://www.cnblogs.com/zeoblog/p/5970324.html