最近打算升级一台服务器,上边部署有一个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 INTO
wp_postsVALUES
等数据插入语句。
也就是说我们备份的没有问题,将上述文件使用tar
打包,再用scp
下载到本地或者上传到其它服务器,我们就完成了数据库的备份。
同理,打包站点www
目录下的文件,并下载到本地或上传到其它服务器,我们就完成了网页内容的备份。
恢复也是十分简单,对于网页备份,下载网页备份被解压到相应目录。
对于数据库备份,下载数据库备份被解压,然后执行如下指令即可:
sudo mysql -u root -ppassword database_name < dump.sql
是不是很简单呀?
接下来做什么
做好备份以后,我们就可以放心地升级服务器了,理论上,有直接升级成功的可能(那样我们就无需去手工恢复站点文件以及数据库内容啦)。
一旦升级失败,我就得将服务器系统恢复至原来的低版本系统,然后再手工恢复站点文件以及数据库备份,唉,想想就很累。我这苦命的人啊!
什么,万一这过程中有啥疏漏怎么办?其实云服务提供商那边我还购买了VPS的备份服务,可以从主机商那边恢复。(不过以前弄过一次,他们的服务有BUG,我差点累死)。
什么,万一升级失败、我的备份也有疏漏,主机商的备份也恢复失败可咋办?万一那种情况真的发生,O哥只能认命了,爱咋咋地呗,反正其实这个网站也没几个人用。
死猪不怕开水烫,就是我啦!
O哥这篇文章能发出来,我猜大概率一切顺利。😂😂😂
我想起一句话,人生不是为自己挖坑就是在为自己挖坑的路上。哈哈哈
不为无益之事,何以遣有涯之生
O哥所言甚是,我们做的绝大多数事情都是无聊之事,做的越多正可说明我们越快乐。😂
技术哥上线 无与匹敌😁
虽然我对此一窍不通,半夜看到O神的文章,我决定还是留下足迹🤣🤣证明我还没睡~!~
👍👍
!LOL
lolztoken.com
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