Pages

Friday, 21 September 2012

让 WordPress 支持 SQLite

WordPress 的标准数据库只支持MySQL,但是有个插件 PDO (SQLite) For WordPress 可以让 WordPress 支持 SQLite,我想 SQLite 应该比 MySQL 更适合我的 Belkin 7231-4p 吧。

PDO (SQLite) For WordPress 的安装很方便,只需要把从下载到的压缩包中解压缩得到的 db.php 以及 pdo 目录上传到 wp-content 目录下,再在 wp-config.php 文件中添加如下一行代码即可
define(‘DB_TYPE’, ‘sqlite’);
另外 PDO (SQLite) For WordPress 需要 lighttpd 的 pdo_sqlite 模块支持,这个通过
opkg -d opt install php5-mod-pdo-sqlite
命令安装即可。之后修改 /opt/etc/php.ini 启用 pdo_sqlite.so,似乎一切都很顺利。但是通过命令
/opt/usr/bin/php-fcgi -c /opt/etc -m
测试的结果并不乐观,输出如下
[PHP Modules]
apc
cgi-fcgi

zlib
[Zend Modules]
Segmentation fault
诡异的 Segmentation fault 错误,想想也许是 pdo_sqlite.so 模块的编译问题吧,正好之前折腾 mysql.so 的时候已经编译好新的 pdo_sqlite.so 了,替换上去再试,居然还是 Segmentation fault。这下郁闷了,翻了翻 Google 好像也没什么好的解决方案。还是下载个新的 PHP 重新编译吧,反正已经有交叉编译环境里,OpenWRT 里的 PHP 版本是 5.2.6,下载了相同子版本号的 5.2.11,经过一番折腾,终于找到了问题所在。
从 phpinfo() 函数的输出可以查看 PHP 的编译参数,openwrt 官方的编译参数里如下一行
‘–with-pdo-sqlite=shared,/home/andy/openwrt/brcm-2.4/staging_dir/mipsel/usr’
但是在我不停的折腾中发现,只有使用
‘–with-pdo-sqlite=shared’
进行编译才不会出现 Segmentation fault 错误,于是修改了 feeds 里 php5 的 Makefile 文件,重新在 kamikaze 中编译了一遍 php5-mod-pdo-sqlite 包,更新到 7231-4p 上得到确认,至此可以正式安装 WordPress for Sqlite 了。
怎么都没想到,install.php 的第二步居然又出错了,这次提示没有找到 xx 表,可是建立数据库的工作应该在 install.php 的第一步已经做过了,怎么还会找不到呢?莫非是 mod_pdo_sqlite.so 还是有问题。好在安装 php5-mod-pdo-sqlite 的时候顺手把 sqlite3-cli 包装上了,可以用 SQLite 的命令行进数据库看看。
SQLite 的命令是以 . 开头回车结束的,可以随时用 .help 查看帮助。先看看建立的数据表再说,输入命令 .tables 回车,一看输出结果就明白问题所在了。先前我在修改 wp-config.php 的时候,想着 SQLite 数据库也就是一个数据库一个文件,没必要再用 WordPress 默认的 wp_ 表前缀了,于是顺手就把 $table_prefix 设置成 ” 了,可是现在列出的表居然全部都还是以 wp_ 为前缀的。估计是这个 PDO (SQLite) For WordPress 插件的 bug 吧,也没心思去看代码了,直接手工修改表名称,再 install.php 下一步,admin 的随机密码顺利出现。
如果你希望自己编译,使用方法可以参考:
cd $kamikaze_home
./scripts/feeds update
patch -p1 feeds/packages/lang/php5/Makefile < ../feed.spackages.lang.php5.Makefile.patch
make menuconfig
make
----------------------------------------------------------------------------
 让WordPress3.x继续支持sqlite

pdo-for-wordpress 这个插件可以让 WordPress 2.x 很好的支持 sqlite,对于像我这种只想玩玩 WordPress 的人来说,sqlite 比 MySQL 要实用得多。
可惜在 WordPress 升级到 3.0 后,这个插件工作的不是很正常,从 2.9.x 自动升级自然不会成功,手工安装勉强可以运行,但是发布、编辑的时候会出现错误,虽然实际上发布、编辑还是成功的。
今天有空研究了下页面错误,发现原来是 WordPress 3.0 把原本是一个字符串的函数调用改成了数组,而 pdo-for-wordpress 这个插件的对应部分不能处理这个变化,导致在页面正常响应之前输出了错误信息。
找到了问题,解决就很简单,打开文件 wp-content/pdo/db.php,把 116 行开始的函数 function escape($string) 改成如下所示
function escape($string) {
 if(is_array($string)) {
  foreach($string as &$s) {
   $s = addslashes($s);
  }
  return $string;
 }
 else {
  return addslashes($string);
 }
}
搞定收工.
这里也给出了一个解决方案 http://wordpress.org/support/topic/plugin-pdo-sqlite-for-wordpress-fixed-a-small-bug-in-the-plugin-appeared-under-wordpress-301
 ---------------------------------------------------------------------------------------
请问这里面用的sqlite是哪个版本的,我用的php里面自带的是sqlite2的,好像wordpress必须用sqlite3?
我用的是 pdo_sqlite,当然 pdo_sqlite 用的就是 sqlite3。
-------------------------------------------------------------------
 WordPress用SQLite db代替MySQL db

WordPress默认就是与MySQL搭配的,这次要为wordpress换一个数据库搭档,但这并不是说MySQL如何的不优秀,但在10万以下的低并发访问,SQLite这样的单文件轻量级数据库系统性能优异,体积小、读取速度快、容量大,免费、开源,其实更适合像blog、或中小型站点的这种场景的数据库应用。

如果你需要独立为数据库服务支付购买,或者并不满意主机系统繁杂的mySQL数据服务,倒真的是应该尝试一下SQLite这样的轻量级数据库。
SQLite官网:
系统环境依赖要求:
主机php套件必须支持SQLite和PDO扩展(不过放心,常见系统都是完美支持的);SQLite的数据库信息存于独立文件中,该文件及文件夹必须要求读写权限。很简单,就这些要求。

升级更换wordpress数据系统:
这里指出一个简易的方法:首先在wordpress后台中使用工具-导出”功能导出.xml文件。
然后,下载SQLite的wordpress功能插件-“”,将压缩包中的db.php和pdo文件夹放置到wp-content文件夹中。

然后,编辑wp-config.php文件,在图示位置加入

define('DB_TYPE', 'sqlite');

重新访问wordpress已经启动了新的安装界面,如同安装,完后使用前面导出的.xml文件,回到wordpress后台然后“导入”即可恢复原数据,然后自行配置一下插件和主题,此时SQLite已经完全开始服役,所有数据读写皆交由SQLite处理。如果此间出现错误,请检查wp- content目录下是否自动生成了database目录,该目录下是否生成了相应的数据库文件myblog.sqlite和.htaccess文件,是否赋予可读写权限?

SQLite能最大限度的降低建站成本,降低维护难度,又能很好的规避mySQL的缺点,SQLite为中小型数据应用很有前景.
------------------------------------------------------------------------------------
wp开发:WordPress用SQLite代替MySQL
,WordPress默认就是与MySQL搭配的,这次要为wordpress换一个数据库搭档,但这并不是说
MySQL如何的不优秀,但在10万以下的低并发访问,SQLite这样的单文件轻量级数据库系统性能优
异,体积小、读取速度快、容量大,免费、开源,其实更适合像blog、或中小型站点的这种场景的
数据库应用。,,如果你需要独立为数据库服务支付购买,或者并不满意主机系统繁杂的mySQL数据服
务,倒真的是应该尝试一下SQLite这样的轻量级数据库。 ,SQLite官网: ,系统环境依赖要求: ,主
机php套件必须支持SQLite和PDO扩展(不过放心,常见系统都是完美支持的);SQLite的数据库信
息存于独立文件中,该文件及文件夹必须要求读写权限。很简单,就这些要求。,,升级更换
wordpress数据系统: ,这里指出一个简易的方法:首先在wordpress后台中使用工具-导出”功能导出
.xml文件。 ,然后,下载SQLite的wordpress功能插件-“”,将压缩包中的db.php和pdo文件夹放置到
wp-content文件夹中。,,􀂠,,然后,编辑wp-config.php文件,在图示位置加入,define('DB_TYPE',
'sqlite');,,至此,重新访问wordpress已经启动了新的安装界面,如同安装,完后使用前面导出的.xml文
件,回到wordpress后台然后“导入”即可恢复原数据,然后自行配置一下插件和主题,此时
SQLite已经完全开始服役,所有数据读写皆交由SQLite处理。如果此间出现错误,请检查wpcontent
目录下是否自动生成了database目录,该目录下是否生成了相应的数据库文件myblog.sqlite和
.htaccess文件,是否赋予可读写权限?, ,SQLite能最大限度的降低建站成本,降低维护难度,又能很
好的规避mySQL的缺点,SQLite为中小型数据应用很有前景。然后自行配置一下插件和主题?系统
环境依赖要求: 。升级更换wordpress数据系统: ,该文件及文件夹必须要求读写权限,xml文件。
此时SQLite已经完全开始服役。但在10万以下的低并发访问。下载SQLite的wordpress功能插件-
“”。但这并不是说MySQL如何的不优秀。其实更适合像blog、或中小型站点的这种场景的数据库
应用,编辑wp-config;SQLite这样的单文件轻量级数据库系统性能优异:体积小、读取速度快、容
量大,主机php套件必须支持SQLite和PDO扩展(不过放心。又能很好的规避mySQL的缺点。
SQLite为中小型数据应用很有前景,很简单。php文件。这里指出一个简易的方法:首先在
wordpress后台中使用工具-导出”功能导出。WordPress默认就是与MySQL搭配的,如同安装
,sqlite和⋯在图示位置加入;倒真的是应该尝试一下SQLite这样的轻量级数据库,回到wordpress后
台然后“导入”即可恢复原数据,SQLite能最大限度的降低建站成本。xml文件:将压缩包中的db。
免费、开源,define('DB_TYPE'。降低维护难度。SQLite的数据库信息存于独立文件中;该目录下是
否生成了相应的数据库文件myblog。就这些要求。常见系统都是完美支持的)?这次要为
wordpress换一个数据库搭档,是否赋予可读写权限。htaccess文件;SQLite官网: ⋯重新访问
wordpress已经启动了新的安装界面!或者并不满意主机系统繁杂的mySQL数据服务,php和pdo文件
夹放置到wp-content文件夹中! 'sqlite')。完后使用前面导出的。如果此间出现错误,所有数据读写
皆交由SQLite处理,如果你需要独立为数据库服务支付购买。请检查wp- content目录下是否自动生成了database目录。
-----------------------------------------

WordPress 使用 SQLite 3做数据库的正确安装方法


有些小内存的VPS,不想装MySQL,于是就想让WordPress 使用 SQLite3

PDO (SQLite) For WordPress 这个插件很早就有了,可一直是个鸡肋,以前错误一堆堆的

今天我又尝试了一下,用最新版的WordPress 3.3 来使用 SQLite3 数据库

我在本机装的VMware虚拟机CentOS中完成,这里我用的一点小技巧分享给大家

1. 向 hosts 添加 192.168.134.133 21andy.com
2. 在虚拟机 nginx 中添加 21andy.com 配置

这样都搞好以后,打包到服务器解压就行了

回到本文主题,WordPress 使用 SQLite 3正确安装方法

WordPress 使用 SQLite 3正确安装方法

正确安装方法如下:
1. 先正常用 MySQL 安装 WordPress
2. 用 mysqldump 导出数据库
mysqldump -hlocalhost -uroot -p --compatible=ansi --skip-opt --default-character-set=utf8 wordpress > wordpress.sql

3. 转换 MySQL 成 SQLite3

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
sed 's/ "id" bigint(20) NOT NULL/ "id" integer primary key autoincrement/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.sqlite > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed ! Output file: $1.sqlite"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

然后
chmod +x mysql_to_sqlihte.sh
./mysql_to_sqlite.sh wordpress.sql

这样会生成一个 wordpress.sql.sqlite 的文件了,就是 SQLite3 数据库

4. 安装 PDO (SQLite) For WordPress 插件
wget http://downloads.wordpress.org/plugin/pdo-for-wordpress.2.7.0.zip
unzip pdo-for-wordpress.2.7.0.zip
mv pdo-for-wordpress/* wordpress/wp-content/
cd wordpress/wp-content/
mkdir database

然后把刚才生成的 wordpress.sql.sqlite 放到 database 目录下
改名为 wordpress.sqlite

5. 编辑配置文件
打开 wp-config.php 添加
define('DB_TYPE', 'sqlite');

其他的 DB_NAME, DB_PASSWORD 等可以设置成空了

打开 wp-content/db.php 查找
define ('FQDB', FQDBDIR .'MyBlog.sqlite');

修改成
define ('FQDB', FQDBDIR .'wordpress.sqlite');

好了,大功告成。

WordPress 使用 SQLite 3正确安装方法

最后,这个插件还不是很完美,有错误的话,会记录在 wp-content/database/debug.txt 中.
有些插件用到 mysql 的话,如果使用有问题,看下插件代码是不是用了 mysql 函数,自己改,但基本可以正常使用了