杭城焰火满天飞, 闲来无事, 给 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.sql

user@localhost:~$ mv MyBlog.db /srv/httpd/wordpress/wp-content/database/MyBlog.sqlite

注: 这个脚本应急还行,但是布署会成问题(转换的字段类型偏差),建议手工校对表结构,添加索引。最后,在linux上,得把sqlite文件的读写权限赋予httpd用户。