温故而知新:使用mysqldump备份WordPress MySQL数据库
最近打算升级一台服务器,上边部署有一个wordpress站点,升级跨度挺大,而且站点上的wp程序又好久没有更新,怕升级后wp与系统不兼容,所以在这之前需要备份一下站点。
(图源 :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工作机制,也可以将root的plugin修改为mysql_native_password,并重新设置密码。但是貌似用sudo也没啥不好的,所以就这么将就用吧(毕竟这台VPS只有我自己用)。
备份与恢复
至此,我们做好了备份前的学习准备,然后执行上文提到的备份语句:
sudo mysqldump -u root -p --default-character-set=utf8 database_name > dump.sql
就会将对应的数据库(注意修改其中的数据库名称)DUMP到一个SQL文件中,查看这个sql文件,我们会发现其中有类似这样的创建数据表语句:
以及类似这样的INSERT INTOwp_postsVALUES等数据插入语句。
也就是说我们备份的没有问题,将上述文件使用tar打包,再用scp下载到本地或者上传到其它服务器,我们就完成了数据库的备份。
同理,打包站点www目录下的文件,并下载到本地或上传到其它服务器,我们就完成了网页内容的备份。
恢复也是十分简单,对于网页备份,下载网页备份被解压到相应目录。
对于数据库备份,下载数据库备份被解压,然后执行如下指令即可:
sudo mysql -u root -ppassword database_name < dump.sql
是不是很简单呀?
接下来做什么
做好备份以后,我们就可以放心地升级服务器了,理论上,有直接升级成功的可能(那样我们就无需去手工恢复站点文件以及数据库内容啦)。
一旦升级失败,我就得将服务器系统恢复至原来的低版本系统,然后再手工恢复站点文件以及数据库备份,唉,想想就很累。我这苦命的人啊!
什么,万一这过程中有啥疏漏怎么办?其实云服务提供商那边我还购买了VPS的备份服务,可以从主机商那边恢复。(不过以前弄过一次,他们的服务有BUG,我差点累死)。
什么,万一升级失败、我的备份也有疏漏,主机商的备份也恢复失败可咋办?万一那种情况真的发生,O哥只能认命了,爱咋咋地呗,反正其实这个网站也没几个人用。
死猪不怕开水烫,就是我啦!
相关链接
Leave 温故而知新:使用mysqldump备份WordPress MySQL数据库 to:
Read more #cn posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.