“啊!”房间里传出我的声音,一个听上去惊慌中带着绝望的凄惨叫声。
手贱,手贱啊!我不小心删除了数据库数据。原本是想删掉其中一张表的数据的,结果一个走神,删错了。这是我们最大的一张表,关键的数据都在这儿。
没有主从备份,没有dump出sql语句,没有...
虽然是实验用的数据库,安全级别低,但是数据本身还是蛮重要的。当初实在太儿戏,没有及时备份。
当然了,定下神来,我知道数据库还是有办法恢复的,只是不确定是不是一定可以迅速恢复。
“不用担心,云服务器还可以恢复镜像。”确实,这是最后的办法。但是这就涉及到代码的问题,代码需要先备份到别的地方。我需要一个更好的方法。
mysqlbinlog!这个神一般的名字出现了。赶紧找到/log里的binlog日志,看看最新的,很好,就是今天改动过。赶紧!
分两步:
- 从binlog导出记录
mysqlbinlog --start-date='年月日 时分秒' --stop-date='年月日 时分秒' master-bin.000006 >re.sql
上面这个操作,把记录从binlog里导出sql语句,重定向到re.sql里。
- 把re.sql重新生成新的数据库
mysql -hxxx -Pxxx -uxxx -pxxx < re.sql
这样,就利用re.sql重新生成了和原来一样的数据库。这里要注意,为了方便,我把原来的数据库的结构语句导出保存后(以防恢复失败),删除,然后才用re.sql重新建了个一样的数据库。否则,会报错,当然了,因为re.sql里包含了建库建表语句嘛,你不删掉,自然报错,因为会mysql发现你要新建的库和表都存在。
另外,很重要的,最好做这两个操作的mysql版本和要生成库的mysql版本一致。我因为服务器上有不止一个mysql版本,一开始做操作的时候用了不同的版本来操作binlog和生成新的库,导致报错。
像在厨房炒菜一样,偶尔失误,记录起来以后回顾。如果mysql里的库或者表被误删除,也可以恢复,关键词是binlog。
此文由电流首发于简书,转载请注明出处。