将后台数据从Berkeley的文件DB转到MySQL

将后台数据从Berkeley的文件DB转到MySQL

最近决定把MT的后台数据从Berkeley的文件DB转到MySQL。原因之一是使用关系数据库可以获得更多的灵活性,比如运行一条sql来变更所有entry的某一个属性;另外一个原因是为了提前熟悉一下这个数据库,牙牙网站使用虚拟主机,DreamHost提供的数据库是MySQL,而我从前主要使用了SQLServer,Oracle和DB2,Postgresql也只了解了一点,而MySQL则几乎没有接触过。

下载了5.0.27安装文件,安装顺利,使用了第一个默认端口3306,UTF-8的数据库字符集。

安装完成,运行了命令行客户端,输入help,给出的帮助命令不多,也没见到有关数据库创建的命令,便查了安装的帮助文件,组织的还算不错,很齐全,很快找到相关的命令:

查看已有数据库showdatabases;连接数据库testusetest;创建数据库mtcreatedatabasemt;接下来寻找把已有DB转化到MySQL的方法,很快找到一个第三方的工具mt-db-convert.cgi,可以实现MT支持的几种不同的DB之间的转换。

下载回来放到cgi-bin的mt目录,在浏览器访问运行,输入新创建的MySQL数据库名称mt,用户名root,密码,主机填入localhost,开始Convert。转换过程很快就完成了,不到1分钟,没有出现错误提示,转换信息如下:

mt-db-convert.cgi($Rev:173$):ConvertingyourMTdatabetweenDBengines(forMT3.2)Loadingdatabaseschema...Loadingdata...MT::Author.(1objectssaved.)MT::Blog..(2objectssaved.)MT::Trackback....................

(327objectssaved.)MT::Category....................

(50objectssaved.)MT::Comment..(2objectssaved.)MT::Entry..............................

(514objectssaved.)MT::IPBanList(0objectssaved.)MT::Log...............................................

(437objectssaved.)MT::Notification(0objectssaved.)MT::Permission....

(4objectssaved.)MT::Placement........................................

(527objectssaved.)MT::Template......................................

(83objectssaved.)MT::TemplateMap..........(10objectssaved.)MT::TBPing(0objectssaved.)MT::Session.............................

(29objectssaved.)MT::PluginData(0objectssaved.)MT::Config.(1objectssaved.)MT::FileInfo(0objectssaved.)DonecopyingdatafromDBMtoDBI::mysql!Allwentwell.Yourrecommendedsetting-------------------------------------

#DataSourceR:/SITE/mt-dbObjectDriverDBI::mysqlDatabasemtDBUserrootDBHostlocalhostDBPasswordcomein-------------------------------------

然后修改mt-config.cgi文件,把数据源改成MySQL。

再次访问MT,看起来一切正常,甚至原有的session都没有丢掉,只是后台使用的数据已经改变了位置。

不过发现了中文乱码问题,Google到了这个方法,按文修改后,需要再次执行mt-db-convert.cgi,把数据重新导入MySQL,再访问MT,乱码没有了,所有中文显示正常。

转换后又发现了一个新的问题,原DB中的Tags全部丢失,原因是mt-db-convert.cgi仅支持到MT3.1,3.3的新功能带来的数据变化可能还会有其它信息丢失。

NOTE

ThisscriptiscompatiblewithMovableTypeversion3.1x.Ididn'ttestitatanyotherversions.

其实MT自身已经提供了转换工具mt-db2sql.cgi,与mt.cgi在同一目录当中。使用方法是,安装好MySQL数据库服务,并创建好用于MT的DB,将MySQL数据库的配置信息加入mt-config.cgi,并同时保留原BerkeleyDB的路径配置,即保持两种DB的配置同时生效,然后通过浏览器运行mt-db2sql.cgi,转换会自动开始,显示如下信息:

Loadingdatabaseschema...Loadingdata...MT::Author1MT::Blog13MT::Trackback...DonecopyingdatafromBerkeleyDBtoyourSQLdatabase!Allwentwell.确认转换成功后,再修改mt-config.cgi,注释掉BerkeleyDB的配置即可。