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

in voilk •  3 months ago

    最近打算升级一台服务器,上边部署有一个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哥只能认命了,爱咋咋地呗,反正其实这个网站也没几个人用。

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

    相关链接

      Authors get paid when people like you upvote their post.
      If you enjoyed what you read here, create your account today and start earning FREE VOILK!