作为一名不喜欢MySQL的pg党,最近又迁了一个WordPress到PostgreSQL上,顺便就作个笔记以备不时不之需吧。当然,web server也从Apache换成了Nginx,所以这个配置也要改一下。
这个比较简单,因为Nginx不支持 .htaccess 配置只能改在conf里(使用php-fpm):
location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/yoursite$fastcgi_script_name; include fastcgi_params; fastcgi_intercept_errors on; }
首先下载WordPress,并解压到你的网站目录。
然后下载PG4WP最新版,8月份更新的这个1.3.1版本已经修正了我之前说的那两个在WordPress 3.9+上的BUG。diff了一下作者的修改内容,跟我当时的修补方法几乎一样(我的wpsql_errno实现粗糙了一点,但是也能用)。
把PG4WP解压出来,把其中的pg4wp目录整个上传到WordPress的wp-content下,然后在wp-content目录里创建一个符号链接:
ln -s pg4wp/db.php
注意:pg4wp有一个坑就是,它只替换了mysql_系列函数,但是高版本的Wordpress检测到系统中安装了mysqli_的话,会自动改用mysqli_系列函数,导致pg4wp替换失败,请修改wp-config.php,在其中指定使用mysql_系列函数:
define('WP_USE_EXT_MYSQL', true);
安装即完成,现在可以开始配置一个全新的WordPress站点:用浏览器打开网站,输入数据库相关配置即可,跟用Apache+MySQL时完全一样。
等等,不是说迁移吗?怎么变成新建了呢?别急,接下来就是迁移的工作。
之所以不是直接把MySQL上的数据库直接迁移过来,是因为PostgreSQL的库结构语句与MySQL有区别,为了保险起见,还是让PG4WP来建结构,只迁移数据部分。
登录原网站的phpMyAdmin(或通过其它方式)导出数据库,导出时需要注意的选项有:
SQL格式使用Traditional,不要用MySQL特有的
用事务包装全部语句
仅导出数据
插入前清空表
插入语句包含字段名
导出完成后,用编辑器打开导出的SQL文件(如果数据库较大,可以使用压缩,则需要解压后打开),作以下修改:
查找`ID`替换为"ID"(注意两个“引号”不一样)
把剩余的`符号全部去掉(替换为空)
注释或删除SET AUTOCOMMIT xxx和SET TIME_ZONE xxx等PostgreSQL不支持的语句
保存后导入PostgreSQL数据库,用phpPgAdmin或者命令:
psql -d dbname < oldsite.sql
其中dbname为PostgreSQL的数据库名,oldsite.sql就是修改过的原数据库导出SQL文件。
完成后再打开网站看看,迁移完成。
经过这样的迁移以后,网站的速度更快,占用服务器资源更少,你的生活也将更愉快……(雾