记一次服务器宕机数据恢复过程

说来买衡天的服务器也有10年有余了,买来也只是为了搭建个博客记录些日常工作上以及生活上的一些心得体会。有人会问了,这么多免费的博客平台不用,干嘛非要花钱折腾个服务器再折腾搭建环境呢。多折腾折腾熟悉了很多linux的一些常识以及服务器一些基础的操作知识。

这次服务器宕机也是自己瞎折腾的结果。最近openapi封了很多ip,哪怕你是国外的节点,只要你注册时的邮箱信息有国内信息,抑或是你用chatgpt问的问题大部分都是中文的,亚洲节点就更不用说了,都会被列入管控名单里面。很显然,我的也被制裁了。然后一通百度谷歌之后发现有篇博客介绍的方法感觉可行性比较大,就是这一篇《Using CloudFlare Warp to Access ChatGPT》,咱也不管底层原理是啥,大概就是说利用cloudflare给咋们出去的流量套一层壳。照着博客说的运行一下脚本,执行了一会发现卡着不动了,过了很久还是没动静,等不及了我就强制退出命令行了。等我再次尝试ssh登录,发现死活也登录不上去。好在客服还算热情,想办法帮我挂载了救援系统,让我得以备份数据。

接着就是将服务器的wordpress根目录整个备份下来,这里也走了些弯路,因为很长时间没操作过服务器了,用了scp来备份数据,而数据量又大,导致备份经常中断,后来想起来scp是覆盖式的备份,rsync是增量备份,其实之前写过一篇文章介绍过。敲打自己一下,脑袋瓜子不长记性。

然后再备份数据库,因为服务器都挂了,不能用常规的mysqldump或者phpMyAdmin后台来导出sql文件了,了解到linux下mysql数据是在/var/lib/mysql下,索性就备份整个文件夹了。

备份完数据后接下来就重装系统,然后恢复数据,其中在数据库恢复过程中走了一些弯路。因为备份的是整个mysql目录,相当于是物理备份了。至少需要保证新安装的数据库软件主版本号跟之前的一致,才能正常恢复。但是忘了之前的版本号是啥,随便装了个mysql5.7版本,很显然折腾了一番没有恢复成功。后来翻看老早之前备份的一份sql文件:

重新点燃了希望,安装完数据库服务端之后,接下来就开始恢复数据。

之前备份的数据库目录是这样的:

只要上传并覆盖这三个文件即可。但是上传完会发现,mysql -u root -p可能进不去mysql命令行,或者进去了但是select * from wordpress.表名,查询不到数据,这是因为mysql文件夹下的文件需要授予mysql分组权限, chown -R mysql:mysql ib_data1chown -R mysql:mysql ib_logfile0chown -R mysql:mysql wordpress,这样操作完以后发现能进入mysql命令行了,也能查询到表数据了。但是浏览器输入域名访问的时候,发现提示“建立数据库连接时出错”。进入wp-config.php,查看数据库配置,其中DB_USER是wordpress,所以需要创建数据库用户wordpress。

在MariaDB中创建一个名为wordpress的用户,分配SELECT和INSERT权限,以及一个非常强大的密码。
-- 创建用户及密码 这里的wordpress是用户名
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '这是密码';
-- 授权SELECT 和 INSERT权限 这里的第一个wordpress是数据库名
GRANT SELECT, INSERT ON wordpress.* TO 'wordpress'@'localhost';
-- 立即刷新用户权限
FLUSH PRIVILEGES;

按照上面的步骤创建好用户并赋予权限后,再次打开网页,发现了久违几天的博客首页。准备进入管理后台发表一下这次备份数据的心得体会,发现账号密码都是对的,怎么也进不到仪表盘页面。意识到这个问题很难去百度搜索到答案了,因为太奇葩了,想着能不能通过日志查看,接着修改wp-config.php,修改define(‘WP_DEBUG_LOG’, true) ;然后登录后页面顶部会出现log日志如下:

看到denied以及UPDATE关键字,想着应该是数据库用户赋予的权限不够导致,上面只赋予了SELECT和INSERT,接着赋予UPDATE和DELETE权限后再次登录,完美搞定。(记得要关闭调试)

还遇到一些奇怪的问题,比如后台更新wordpress版本,发现总是进入ftp登录页面。要么自己搭建个ftp服务,偷懒省事可以直接修改wp-config.php,在任意位置插入如下几句话即可(记得操作完后要删除这几行):

define("FS_METHOD", "direct"); 
define("FS_CHMOD_DIR", 0777); 
define("FS_CHMOD_FILE", 0777);

这样更新可能还会出现问题,比如出现什么升级失败,验签失败之类的,这个需要改下根目录权限:chmod -R 777 /var/www/wordpress

最后再补充一句,也为了能给自己一个警示——要记得常备份重要数据!切不可抱着侥幸心理觉得我的服务器很稳定不会出事!

至此,本次服务器宕机事故告一段落,谨以此篇文章记录下这两天的折腾过程,也希望能给遇到此类问题的读者提供一些帮助。