杭城焰火满天飞, 闲来无事, 给 WordPress 换上SQLite; SQLite 在单服务器10W并发以下是很有优势的, 据说可以达到mysql与postgresql的2~20倍(道听途说, 没验证)。 使用WP插件pdo for wordpress, 本来使用XML导入导出数据, 奈何文件太大, 超过php的内存限制,找了个MySQL转SQLite的教本, 很好用, 分享。
文件: mysql2sqlite.sh
1 #!/bin/bash
2 # MySQL 2 SQLite
3 if [ "x$1" == "x" ]; then
4 echo "Usage: $0 <dumpname>"
5 exit
6 fi
7
8 cat $1 |
9 grep -v ‘ KEY "‘ |
10 grep -v ‘ UNIQUE KEY "‘ |
11 grep -v ‘ PRIMARY KEY ‘ |
12 sed ‘/^SET/d‘ |
13 sed ‘s/ unsigned / /g‘ |
14 sed ‘s/ auto_increment/ primary key autoincrement/g‘ |
15 sed ‘s/ smallint([0-9]*) / integer /g‘ |
16 sed ‘s/ tinyint([0-9]*) / integer /g‘ |
17 sed ‘s/ int([0-9]*) / integer /g‘ |
18 sed ‘s/ character set [^ ]* / /g‘ |
19 sed ‘s/ enum([^)]*) / varchar(255) /g‘ |
20 sed ‘s/ on update [^,]*//g‘ |
21 sed ‘s/\\r\\n/\\n/g‘ |
22 sed ‘s/\\"/"/g‘ |
23 perl -e ‘local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"‘ |
24 perl -pe ‘
25 if (/^(INSERT.+?)\(/) {
26 $a=$1;
27 s/\\‘\’‘/‘\’\’‘/g;
28 s/\\n/\n/g;
29 s/\),\(/\);\n$a\(/g;
30 }
31 ‘ > $1.sql
32 cat $1.sql | sqlite3 $1.db > $1.err
33 ERRORS=cat $1.err | wc -l
34 if [ $ERRORS == 0 ]; then
35 echo "Conversion completed without error. Output file: $1.db"
36 rm $1.sql
37 rm $1.err
38 else
39 echo "There were errors during conversion. Please review $1.err and $1.sql for details."
40 fi
41 # 来源 http://www.sqlite.org/cvstrac/wiki?p=ConverterTools
转换步骤:
#导出WordPress数据库
user@localhost:~$ mysqldump -u root -p –compatible=ansi –skip-opt wordpress > MyBlog.sql#转换.sql至SQLite数据库文件
user@localhost:~$ sh mysql2sqlite.sh MyBlog.sqluser@localhost:~$ mv MyBlog.db /srv/httpd/wordpress/wp-content/database/MyBlog.sqlite
注: 这个脚本应急还行,但是布署会成问题(转换的字段类型偏差),建议手工校对表结构,添加索引。最后,在linux上,得把sqlite文件的读写权限赋予httpd用户。
我还是不折腾了吧……