MediaWikiで利用しているMySQLが、Version 4系からVersion 5系に上がったため、一旦データベースをクリアした後に、再構築することとなった。
なお、MediaWikiのインストールパスは、~/mw と仮定する。
事前準備
MediaWiki 1.14.0 および MySQL 4.0で正常に運用している状態で
MediaWiki付属のdumpBackup.phpを用いてデータベースのバックアップを行う。(MediaWikiルートディレクトリにDBサーバのユーザ名、パスワードを記したAdminSettings.phpを一時的に作成して作業すること)
[user@ ~] php ~/mw/maintenance/dumpBackup.php --full > ~/backup.xml
移行作業
MediaWiki 1.14.0 および MySQL 5.1で新たに運用開始する前提とする。
なお、別のサーバに新規でMediaWikiをセットアップして、データのみを移行してくる場合も、ここで説明する手法がそのまま使える。
MediaWikiで用いるデータベース構造の作成をまず行う必要があるため、設定ファイルを退避する。
[user@ ~] mv ~/mw/LocalSettings.php ~/LocalSettings.php.org
ブラウザよりMediaWikiを読み込ませると、セットアップのためのリンクが表示される。もしくは、~/config/ フォルダをブラウザより直接アクセスして、再セットアップを行う。
セットアップを行うことで、必要なテーブルが全て作成される
退避しておいたLocalSettings.phpの内容を、新たに作られた LocalSettings.phpに(必要箇所を)マージする。(拡張機能など)
MetaWikiで配布されているXml2sqlを用いて、dumpBackup.phpで作成されたXMLデータを、SQLコマンドスクリプトに変換する。
まず、ツールのコンパイル。なお、パッチファイルの適用でエラーが出る場合は、741行目辺りに手動で2行パッチを当ててやれば良い。
[user@ ~] wget ftp://ftp.tietew.jp/pub/wikipedia/xml2sql-0.5.tar.gz
[user@ ~] tar xvf xml2sql-0.5.tar.gz
[user@ ~] cd xml2sql-0.5
[user@xml2sql-0.5] patch < patchfile.txt ← 配布されているパッチを適用すること
[user@xml2sql-0.5] ./configure
[user@xml2sql-0.5] make
XMLをSQLに変換する。(page.sql, text.sql, revision.sql の3つのファイルが作成される)
[user@ ~] xml2sql-0.5/xml2sql -m backup.xml
バイナリを破壊せずに編集できるテキストエディタで (私はemacsを使用した) 、テーブル名をプレフィックスが付いたものに書き換える。例えば、
-- xml2sql - MediaWiki XML to SQL converter
-- Table page for MySQL
/*!40000 ALTER TABLE `pfix_page` DISABLE KEYS */;
LOCK TABLES `pfix_page` WRITE;
INSERT INTO `pfix_page` VALUES (1,0,'メインページ','',0,0,0,0.34359867591410875,'20090224140516',110,1440),
(2,12,'目次','',0,0,0,0.83194796973839402,'20090224140558',111,802),
~ 途中略 ~
(49,0,'サンドボックス','',0,0,1,0.57942601107060909,'20090317112322',138,70);
UNLOCK TABLES;
/*!40000 ALTER TABLE `pfix_page` ENABLE KEYS */;
このように、赤で示したところだけを書き換える。
MySQLで、該当テーブルを空にする。(-pパスワード は間にスペースを挟まないで入力)
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名
mysql> truncate table pfix_page;
mysql> truncate table pfix_text;
mysql> truncate table pfix_revision;
mysql> quit;
データを全て読み込ませる
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名 < page.sql
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名 < text.sql
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名 < revision.sql
さらに、interwikiのキーワードを追加したり変更したりしている場合、pfix_interwiki テーブルのデータを移行する必要がある。MediaWikiのバージョンでテーブル構造が若干違うので、手動でコピーする必要がある場合もある。
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名
mysql> insert into mw_interwiki (iw_prefix,iw_url,iw_local,iw_trans) values ('w','http://ja.wikipedia.org/wiki/$1',0,0);
Query OK, 1 row affected, 2 warnings (0.17 sec)
ここまでで一通りの作業が終了する。
MediaWikiデータのバックアップとリストア
MySQLのバージョンや、テーブル構造(文字コードも含めて)が同一の場合は、次の方法でも移行できる。(平素のバックアップも、この方法で行っておけば良いと思われる)
MediaWiki 1.14 および MySQL 5.1 が正常に稼働しているシステムで
バックアップを行う
[user@ ~] mysqldump -Q --host=サーバ名 --user=ユーザ名 --password=パスワード --default-character-set=binary DB名 > backup.sql
端末とサーバの間の文字コード不一致によって、MySQLの文字コード自動変換が働き、UTF-8の文字列が7ビットで切り落とされてしまう不具合に対処するため、『 --default-character-set=binary 』 オプションを付けている。
リストアを行う
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名 < backup.sql
エラーが出る例 1 : mysqldump で xml ダンプした場合
mysqldumpで作成したXMLファイルをインポートするときに、次のようなエラーが発生して読み込み不可能になる。(バックアップとリストアを続けて書いているが、その間にDBを全削除しないとエラーになるのはお分かりの通り)
[user@ ~] mysqldump -Q --host=サーバ名 --user=ユーザ名 --password=パスワード --default-character-set=binary --xml DB名 > backup.sql
[user@ ~] mysql -h サーバ名 -u ユーザ名 -pパスワード DB名 < backup.xml
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
めんどくさいので、原因追及していない。
エラーが出る例 2 : importDump.php を利用してインポートする場合
Xml2sqlではなく、MediaWiki付属の importDump.php を用いると、記事中の不等号記号 『 < や > 』 が削除されることがある。特に、 <pre> や <source> や <includeonly> などが軒並み不等号記号(>や<)の削除で、ページの体裁が崩れまくることになる。
また、importDump.php はものすごく遅いので、全然お薦めできない。