转换MediaWiki的MySQL数据库格式MyISAM-InnoDB及字符集latin1-utf8
--James Qi 2009年6月17日 (三) 13:51 (CST)
2006年初最早安装MediaWiki的时候,我们使用的是老版本MySQL,设置的时候是选择的MyISAM格式、Latin1字符集。
但在2007年后的设置中都是改成了新版本的MySQL,然后使用了InnoDB格式、Utf8字符集。
站点之间基本是独立的,虽然有用Interwiki链接,但数据库格式、字符集没有什么影响。
不过还是存在一个问题,用户数据库采取共享以后,在两种采用不同数据库格式、字符集的网站中查看用户列表,就会发现中文有了乱码。
这个问题一直存在,让同事反复试验进行数据库转换都没有成功。
今天趁着MediaWiki升级的过程,我拿了一个很少数据的站点Wiki.18dao.com:来做实验,可以成功转换,记录如下:
- 新建一个站点,创建一个新的数据库wiki18daocom-new,使用新的InnoDB格式、Uft8字符集;
- 在新站点的数据库中手工加入Interwiki数据,注意1.15.0中URL需要用文件上传而不是以前的文本;
- 从已经升级到1.15.0的原来站点的maintenance下进行用php dumpBackup.php --full及php dumpBackup.php --logs导出所有版本数据及每页日志;
- 在新站点maintenance下用php importDump.php导入上面的两个xml文件;
- 运行rebuildrecentchanges.php,默认生成最近一周的“最近更改”数据;
- 复制老站点images目录下的文件到新站点对应目录,在新站点maintenance下用php rebuildImages.php --missing扫描恢复上传的文件;
- 后来看到dumpBackup.php还有一个--uploads参数,还没有测试,应该可以更好解决文件恢复的问题
- 仔细全面检查新网站,做必要的调整(例如上传文件的复制等)。
这个办法有些麻烦,但好歹算是可以基本完成这个转换。
还有几个网站:en.18dao.net:、027:、cn.18dao.net:等也是用的最早的数据库格式和字符集,以后有时间、有必要的时候再去转换。
后记
--James Qi 2009年11月8日 (日) 22:16 (CST)
6月份将Wiki.18dao.com:转换不久把027:也转了,但因为MediaWiki 1.15.0本身的一些问题不了解以及对应繁体克隆网站总是有些问题,所以一直没有继续把剩下的两个转换。不过这个工作迟早总是要做的,不可能一直停留在1.15.0版本以及延续以前的格式和字符集,2009年11月准备在MediaWiki年底推出1.16版本以前解决所有剩下的问题。这两天周末正在进行转换,先是把cn.18dao.net:和tw.18dao.net:进行升级到1.15.0,然后把以前升级过的en.18dao.net:和这次刚升级的cn.18dao.net:进行格式和字符集的转换,tw.18dao.net:的格式和字符集是不需要转换的。
在转换中使用了--uploads参数,但还是需要使用php rebuildImages.php --missing来恢复文件。具体是使用下面的两个命令生成两个备份文件:
/usr/local/php/bin/php dumpBackup.php --full --uploads --output=file:full_uploads.xml /usr/local/php/bin/php dumpBackup.php --logs --output=file:logs.xml
然后用两个命令导入:
/usr/local/php/binp importDump full_uploads.xml /usr/local/php/binp importDump logs.xml
还要使用的命令:
/usr/local/php rebuildImages.php --missing #恢复文件 /usr/local/php runJobs.php #更新链接、重新生成文件缓存 /usr/local/php rebuildrecentchanges.php #重建最近更改
对于导出、导入中间报错的一些地方还要仔细检查、处理。
标签:MediaWiki、MySQL、MyISAM、InnoDB、Latin1、Utf8。 |
相关内容:
|