就前段时间将 流星影院 服务器从美国迁移到香港的时候,不小心将数据库删了,后面研究了半天,才恢复回来,然后现在在这里记录一下方法

首先呢先检查一下宝塔面板回收站是不是开着的,因为宝塔环境默认是开着的,或者数据库是否有近期备份文件,假如回收站开着或者数据库有备份,那么就可以直接恢复了,下面的这些内容就不再需要了

1

假如你的数据库能够恢复,请在第一时间内开启数据回收站,并增加计划任务里的网站和数据库备份

{callout color="#f0ad4e"}
在我的这种办法中,想要完成mysql的删库恢复,你的mysql必须开启了二进制日志,万幸的是宝塔面板下这一功能是默认开启的,想要确定mysql是否开启,最直接的办法,就是去 /www/server/data 目录下,看看有没有几个mysql-bin文件,像下图这样的:
1
{/callout}

{callout color="#00ff00"}
结尾数字可能不是从1开始的,但只要有,那就说明可以继续下一步,假如没有,那么尝试全盘搜索mysql-bin文件,假如哪都没有,那这个办法就行不通了

操作之前,将mysql-bin文件全部备份下,以免失误带来不可逆的损失

服务器中假如有其他的数据库,也提前备份下

完成备份后远程连接服务器用root权限使用以下命令

/www/server/mysql/bin/mysqlbinlog --start-datetime="2021-05-20 15:30:01" --stop-datetime="2021-08-24 12:30:50"/www/server/data/mysql-bin.0000* > redata.sql

{/callout}

{callout color="#ffff00"}
其中的 /www/server/mysql/bin/mysqlbinlog mysqlbinlog 程序的位置,这样写的好处是不用增加配置系统环境变量,start和stop是划定时间段,注意结束时间不能是删除数据库之后的时间,也就是整个时间段必须在删除数据库之前,假如无法精确,那尽量提前到几天前,开始的时间要早于数据库建立的时间,假如记不清,那可以删掉开始时间,简写为

/www/server/mysql/bin/mysqlbinlog --stop-datetime="2021-08-24 12:30:50" /www/server/data/mysql-bin.0000* > redata.sql

{/callout}

{callout color="#ff00ff"}
以根据mysql-bin文件的大小和修改时间,确定某个具体的mysql-bin文件,那也可以写具体文件名,例如mysql-bin.000001,一般对应的文件都比较大

运行上面的命令后进入root目录下查看是否出现了redata.sql文件,该文件大小应该远大于删掉的数据库大小,假如没有生成该文件或者该文件过小,那么尝试下面这条命令 :

/www/server/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v -d 数据库名 /www/server/data/mysql-bin.0000* > redata.sql

{/callout}

{alert type="error"}
如果一切顺利的话,那么数据库就会恢复到删除前的状态,但是有些情况下只能部分恢复,数据无价,请多备份
{/alert}