标签:告诉 误删除 -- 误删 hang 存在 分享 alt 方便
无论是刚刚入行的‘猿友’还是入行很久的‘老猿’,我相信都会遇到过因为各种原因(很多情况下是自己误删了数据库)的操作.drop databases xxxxx
而误删了线上项目的数据库是一件很恐怖的事情,那么如果大家遇到这种情况怎么办呢?首先不要着急(我感觉说了也白说-,-),先看一看自己的mysql是否开启了binlog日志功能,如果没有???game over !!!
关于查看binlog日志有没有开启,请到自己的Mysql文件下找my.ini中的[mysqld],里面是否有log-bin=mysql-bin,有则表示开启了(没有开启的赶紧开启,不然都没后悔药吃!!!)
为了方便新手阅读,在此我从数据备份开始讲。
【数据备份】
在确保了binlog开启了之后,在mysql文件夹中的bin文件夹中有一个mysqldump.exe,这个就是常用的数据库备份工具之一,我们执行此程序,备份我们的drop_test数据库
执行语句:mysqldump -uroot -p -B -F -R -x --master-data=2 drop_test > d:\backups\drop_test_bac.sql;这是完全备份,用于备份此语句执行时(到这时刻为止)的数据库数据
输入密码后,即可在D:\backups目录下看到文件drop_test_bac.sql
我们可以打开看看,发现里面存了数据库drop_test的表信息以及表内容
假如我们在备份之后,又操作了数据库(往drop_test数据库中增加了内容)
而这个时候,我们误删除了数据库drop_test(悲剧的执行了drop database drop_test),导致数据库drop_test没了!!!
这个时候不要慌,首先我们先从备份的数据库文件中还原数据
执行语句:mysql -uroot -p > d:\backups\drop_test_bac.sql
执行结束后我们将发现drop_test数据库又回来了,并且里面的表还在,数据.....嗯?怎么只恢复了一部分数据?还有一部分呢?????
我们在做备份数据库之后,又新增了一些数据,假如在新增之后我们删除了数据库,那么新增的那部分怎么办?不要急,首先我们打开drop_test_bac.sql,找到类似-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000009‘, MASTER_LOG_POS=107;这句话,这句话告诉我们,将那些新增的数据保存在了mysql-bin.000009的第107节点里,接下来我们就要考虑从这里恢复我们的数据。
这个mysql-bin.000009在我们的mysql文件夹中的data文件夹里(我的是phpstudy环境,默认在这里),我们先拷贝到d:\backups文件夹里
通过mysqlbinlog命令将mysql-bin.000009二进制文件转成sql文件(刚开始我的mysql的bin文件夹里没有mysqlbinlog工具,我是到网上下了一个,如果没有的同学可以问我要,也可以自己网上找)
执行语句:mysqlbinlog -d drop_test d:\backups\mysql-bin.000009 > d:\backups\009bac_bin.sql
执行结束后我们在d:\backups文件夹里会生成009bac_bin.sql文件
将此文件里的drop操作删除(不然恢复了又直接删除了-,-)
接下来就是恢复此文件数据了
执行语句:mysql -uroot -p > d:\backups\009bac_bin.sql
数据恢复完成!!!
PS:第一次发微博,有些地方写得不好的地方欢迎大家指出!!!
标签:告诉 误删除 -- 误删 hang 存在 分享 alt 方便
原文地址:https://www.cnblogs.com/x-gentleman/p/9571697.html