Movable Type 4.x 如何从sqlite移植到mysql

     本人还是比较喜欢sqlite,但是 dreamhost + sqlite 就成了恶梦。dreamhsot使用nfs挂载用户目录,导致使用文件锁的sqite性能奇差,甚至半天打不开一个页面,所以我进行了把 MT 从sqlite到mysql得转换。

 

1. 把数据从sqlite里导出:

   sqlite3 mt.db .dump > mt.sql

2. 由于sqlite与mysq的SQL语句有所差异,所以进行修改:

   cat mt.sql | grep -v "BEGIN TRANSACTION" | grep -v "COMMIT" | perl -pe 's/INSERT INTO \"(.*)\" VALUES/INSERT INTO `\1` VALUES/' | perl -pe "s/^\);$/\) ENGINE=MyISAM DEFAULT CHARSET=utf8;/" > mt.mysql.sql

3. 通过dreamhost panel创建数据库,并导入sql:

[coke]$  mysql -h mysql.trac.net.cn -utrac -p --default-character-set=utf8
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1079818 to server version: 5.0.67-userstats-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> source mt.mysql.sql;

4. 修改mt中的数据库设置(vi mt-config.cgi):

#======== DATABASE SETTINGS ==========

ObjectDriver DBI::mysql
Database <database-name>
DBUser <database-username>
DBPassword password
DBHost <database-password>

5. 转换成功

 

补充: 由于sqlite没有auto_increment语法,所以生成的mysql语句中所有主键都不能自动编号,导致后台出现问题。我是通过phpmyadmin手工修改的。虽然麻烦点,但是只有39个表速度还是可以的。

Categories