之前一直害怕折腾 WordPress 搭出来的博客,主要是对 PHP 和 MySql 都不太熟悉,对相关的备份啊、迁移啊也不太熟悉。前段时间,不得不对一个 WordPress 博客做了迁移,从一台服务器挪到了另外一台上,还挺顺利的,记录一下。

准备好目标环境

现在目标机器上装好相关的环境,PHP、MySQL 之类的,然后安装 WordPress。我已经把源机器上的 WordPress 升级到最新版本了,所以在目标机器上也装上最新版本就行了。

没试过在不同版本的 WordPress 之间做数据迁移,感觉如果没有特别的原因,还是尽量保持两边的版本一致吧。

当然需要给 WordPress 创建一个数据库(比如叫做 my_wordpress)以及用户(比如 wp_user):

1
2
3
4
5
$ mysql -uroot -p
mysql> CREATE DATABASE my_wordpress;
mysql> GRANT ALL PRIVILEGES ON my_wordpress.* TO wp_user@localhost IDENTIFIED BY "use-your-real-password";
mysql> FLUSH PRIVILEGES;
mysql> EXIT

暂停博客

在对源博客数据打包前,先要暂停它的服务,避免不必要的数据错误或者遗失。我选择了 最省事的方法,直接在博客根目录下创建一个名为 .maintenance 的文件,内容为:

1
<?php $upgrading = time(); ?>

这样再访问源博客的时候,页面会提示“正在执行例行维护,请一分钟后回来”。当然了,这里的“一分钟”是写死的,什么时候来看都是同样的提示。

原理是 WordPress 会检查根目录下是否存在名为 .maintenance 的文件,如果存在,则会检查当前时刻与该文件提供的 $upgrading 数值之间的差异,如果当前时刻减去 $upgrading 小于十分钟,则会显示正在维护,否则就正常访问。现在 $upgrading 的值永远跟当前时刻一致,计算出来的差值一直都是 0,所以会一致在维护状态中。

打包源博客数据

WordPress 博客的文章、评论等数据都保存在数据库中,直接 dump 出来就可以做备份或者迁移。我就直接用 mysqldump 命令来导出现有的数据:

1
mysqldump -uDB_USER_NAME -pDB_USER_PASSWORD DB_NAME | gzip > my-worpress.sql.gz

命令中大写的部分需要用自己的用户名、密码和数据库名替换。导出的文件用 gzip 压缩一下以便通过网络复制到目标机器。

附件、插件、主题等都保存在 wp-content 目录中,直接压缩打包:

1
tar -zcf content.tar.gz wp-content

在目标机器恢复数据

上面打包好的两个文件可以通过 scp、ftp 等工具传送到新的机器上,然后分别将数据恢复出来即可。

1
2
3
gunzip < my-worpress.sql.gz | mysql -uwp_user -pYOUR_PASSWORD my_wordpress
tar -zxf content.tar.gz
cp -Rp wp-content/* PATH-TO-YOUR-WORDPRESS-wp-content-FOLDER

配置文件

如果源博客的 wp-config.php 里面做过一些特别的修改,把它们也写到新博客的配置文件里即可。

善后

最后把目标机器上的 web server 配置好,把域名解析切换过去就好了。

Like this post? Share on: TwitterFacebookEmail

Comments

So what do you think? Did I miss something? Is any part unclear? Leave your comments below.

comments powered by Disqus

Keep Reading


Published

Category

建站

Tags

Stay in Touch