最近决定把mt的后台数据从berkeley的文件db转到mysql。原因之一是使用关系数据库可以获得更多的灵活性,比如运行一条sql来变更 所有entry的某一个属性;另外一个原因是为了提前熟悉一下这个数据库,牙牙网站使用虚拟主机,dreamhost提供的数据库是mysql,而我从前 主要使用了sql server,oracle和db2,postgresql也只了解了一点,而mysql则几乎没有接触过。
下载了5.0.27安装文件,安装顺利,使用了第一个默认端口3306,utf-8的数据库字符集。
安装完成,运行了命令行客户端,输入help,给出的帮助命令不多,也没见到有关数据库创建的命令,便查了安装的帮助文件,组织的还算不错,很齐全,很快找到相关的命令:
查看已有数据库show databases;连接数据库 testuse test;创建数据库 mtcreate database mt;接下来寻找把已有db转化到mysql的方法,很快找到一个第三方的工具mt-db-convert.cgi ,可以实现mt支持的几种不同的db之间的转换。
下载回来放到cgi-bin的mt目录,在浏览器访问运行,输入新创建的mysql数据库名称mt,用户名root,密码,主机填入localhost,开始convert。转换过程很快就完成了,不到1分钟,没有出现错误提示,转换信息如下:
mt-db-convert.cgi($rev: 173 $): converting your mt data between db engines (for mt 3.2) loading database schema... loading data... mt::author . (1 objects saved.) mt::blog .. (2 objects saved.) mt::trackback .......... ..........
(327 objects saved.) mt::category .......... ..........
(50 objects saved.) mt::comment .. (2 objects saved.) mt::entry .......... .......... ..........
(514 objects saved.) mt::ipbanlist (0 objects saved.) mt::log .......... .......... .......... .......... .......
(437 objects saved.) mt::notification (0 objects saved.) mt::permission ....
(4 objects saved.) mt::placement .......... .......... .......... ..........
(527 objects saved.) mt::template .......... .......... .......... ........
(83 objects saved.) mt::templatemap .......... (10 objects saved.) mt::tbping (0 objects saved.) mt::session .......... .......... .........
(29 objects saved.) mt::plugindata (0 objects saved.) mt::config . (1 objects saved.) mt::fileinfo (0 objects saved.) done copying data from dbm to dbi::mysql! all went well. your recommended setting -------------------------------------
# datasource r:/site/mt-db objectdriver dbi::mysql database mt dbuser root dbhost localhost dbpassword comein -------------------------------------
然后修改mt-config.cgi文件,把数据源改成mysql。
再次访问mt,看起来一切正常,甚至原有的session都没有丢掉,只是后台使用的数据已经改变了位置。
不过发现了中文乱码问题,google到了这个方法 ,按文修改后,需要再次执行mt-db-convert.cgi,把数据重新导入mysql,再访问mt,乱码没有了,所有中文显示正常。
转换后又发现了一个新的问题,原db中的tags全部丢失,原因是mt-db-convert.cgi仅支持到mt 3.1,3.3的新功能带来的数据变化可能还会有其它信息丢失。
note
this script is compatible with movable type version 3.1x. i didn't test it at any other versions.
其实mt自身已经提供了转换工具mt-db2sql.cgi,与mt.cgi在同一目录当中。使用方法是,安装好mysql数据库服务,并创建好用于mt的db,将mysql数据库的配置信息加入mt-config.cgi,并同时保留原berkeley db的路径配置,即保持两种db的配置同时生效,然后通过浏览器运行mt-db2sql.cgi,转换会自动开始,显示如下信息:
loading database schema...loading data...mt::author 1mt::blog 1 3mt::trackback ...done copying data from berkeley db to your sql database! all went well.确认转换成功后,再修改mt-config.cgi,注释掉berkeley db的配置即可。
新闻热点
疑难解答