温故而知新:使用mysqldump备份WordPress MySQL数据库

最近打算升级一台服务器,上边部署有一个wordpress站点,升级跨度挺大,而且站点上的wp程序又好久没有更新,怕升级后wp与系统不兼容,所以在这之前需要备份一下站点。

image.png
(图源 :pixabay)

站点有两部分主要数据,分别是站点上的程序文件(*.php一堆)、图片等,以及站点的MySQL数据库。

文件我们使用tar直接打包即可,那么数据库该如何备份呢?我没记错的话,WP后台就有备份功能,但是好久没有登录后台,现在用户名密码早就忘干净了,就算是想起来,现在后台还能用不能用也两说呢。

备份语句

那么剩下方法大概就只能是直接备份数据库啦,使用的工具就是mysqldump,一款我十多年前几乎每天都在用的工具,现在咋用都忘得差不多啦。

不过好在这个工具用起来很简单,直接使用如下语句即可:

sudo mysqldump -u root -p --default-character-set=utf8 database_name > dump.sql

(注:为了让中文被正确处理,加入--default-character-set=utf8参数,注意是utf8而不是utf-8

其中database_name为我们要备份的数据库名,如果不清楚数据库名,可以使用mysql命令行客户端链接,并使用SHOW DATABASES;指令查询。

在我的服务器上,操作如下:

sudo mysql -u root -p

登录后,执行SHOW DATABASES;指令,显示结果如下:

mysql>  SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpressdb        |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

其中,wordpressdb就是我们的数据库啦,另外几个都是系统相关的数据库,我们不用去理会。

关于权限

这里额外插播一点信息,原本MySQL是可以在Linux的普通用户下连接MYSQL root用户的(亦即不使用sudo即可完成上述操作),但是这次试了一下竟然不可以用。

而且更诡异的是,使用了sudo(亦即root权限后),mysql或者mysqldump竟然可以使用任意密码登录到MySQL的root用户(亦即原本设置的密码都无效了)。

我粗略地了解了一下,可能是MySQL中验证插件的变化:

mysql> use mysql
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| localhost | root             | auth_socket           |
| localhost | mysql.session    | mysql_native_password |
| localhost | mysql.sys        | mysql_native_password |
| localhost | debian-sys-maint | mysql_native_password |
| localhost | sitexxxx_wpuser  | mysql_native_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

(通过这个可以看到root对应的验证插件为auth_socket

虽然我没太理解这个auth_socket工作机制,也可以将rootplugin修改为mysql_native_password,并重新设置密码。但是貌似用sudo也没啥不好的,所以就这么将就用吧(毕竟这台VPS只有我自己用)。

备份与恢复

至此,我们做好了备份前的学习准备,然后执行上文提到的备份语句:

sudo mysqldump -u root -p --default-character-set=utf8 database_name > dump.sql

就会将对应的数据库(注意修改其中的数据库名称)DUMP到一个SQL文件中,查看这个sql文件,我们会发现其中有类似这样的创建数据表语句:
image.png

以及类似这样的INSERT INTOwp_postsVALUES等数据插入语句。

也就是说我们备份的没有问题,将上述文件使用tar打包,再用scp下载到本地或者上传到其它服务器,我们就完成了数据库的备份。

同理,打包站点www目录下的文件,并下载到本地或上传到其它服务器,我们就完成了网页内容的备份。

恢复也是十分简单,对于网页备份,下载网页备份被解压到相应目录。

对于数据库备份,下载数据库备份被解压,然后执行如下指令即可:

sudo mysql -u root -ppassword database_name < dump.sql

是不是很简单呀?

接下来做什么

做好备份以后,我们就可以放心地升级服务器了,理论上,有直接升级成功的可能(那样我们就无需去手工恢复站点文件以及数据库内容啦)。

一旦升级失败,我就得将服务器系统恢复至原来的低版本系统,然后再手工恢复站点文件以及数据库备份,唉,想想就很累。我这苦命的人啊!

什么,万一这过程中有啥疏漏怎么办?其实云服务提供商那边我还购买了VPS的备份服务,可以从主机商那边恢复。(不过以前弄过一次,他们的服务有BUG,我差点累死)。

什么,万一升级失败、我的备份也有疏漏,主机商的备份也恢复失败可咋办?万一那种情况真的发生,O哥只能认命了,爱咋咋地呗,反正其实这个网站也没几个人用。

死猪不怕开水烫,就是我啦!

相关链接

Sort:  

O哥这篇文章能发出来,我猜大概率一切顺利。😂😂😂

我想起一句话,人生不是为自己挖坑就是在为自己挖坑的路上。哈哈哈

不为无益之事,何以遣有涯之生

O哥所言甚是,我们做的绝大多数事情都是无聊之事,做的越多正可说明我们越快乐。😂

技术哥上线 无与匹敌😁

虽然我对此一窍不通,半夜看到O神的文章,我决定还是留下足迹🤣🤣证明我还没睡~!~

!LOL

What do you call a hippo who says something and does the complete opposite?
A hippocrite

Credit: reddit
@oflyhigh, I sent you an $LOLZ on behalf of gameexp

(8/10)
Farm LOLZ tokens when you Delegate Hive or Hive Tokens.
Click to delegate: 10 - 20 - 50 - 100 HP