MediaWikiのアップグレード手順

最終更新:2016/09/06

いつの間にか、MediaWikiが1.23にアップデートされていた。1.22でもとりあえず困ってはいないんだけど、セキュリティの問題もあるし、いざという時にメンテナンスできないと困るので、練習のつもりでアップグレードに挑戦してみることにした。

MediaWikiの公式サイトにもアップグレード・マニュアルはあるんだけど、あらゆるバージョンや環境のことを網羅しようとした書き方になっているので、わかりやすいとは言えない。

さくらのレンタルサーバにMediaWikiをインストールしているという前提で、ざっとまとめてみた。おおまかに言うと、手順は次のとおり。

  1. 現在のデータベースのバックアップ
  2. 現在のMediaWikiのバックアップ
  3. 新しいMediaWikiのダウンロード
  4. 新しいMediaWikiの展開
  5. 新しいMediaWikiを現在のMediaWikiに上書き
  6. データベースを新しいMediaWikiに適合させる

具体的なコマンドは次のような感じ。SSHにログインを参考にSSHシェルにログインして実行する。

mysqldump -h [host-name] -u [user-name] --password=[your-pass] --xml [dbname] > backup.xml
cd www
tar cvzf mediawiki.backup.tar.gz [wiki-directory]
wget http://download.wikimedia.org/mediawiki/1.23/mediawiki-1.23.1.tar.gz
tar xvzf mediawiki-1.23.1.tar.gz
cp -a mediawiki-1.23.1/* /home/[user-name]/www/[wiki-directory]/.
cd [wiki-directory]/maintenance
php update.php

[2016年2月13日追記]

MediaWikiのダウンロードの方法が変わって、HTTPS接続でないとデータを取得できなくなった。また、普通にダウンロードしようとすると証明書関連の問題でアクセスを拒否されることがあるので、--no-check-certificateオプションを追加した(チェックを省略するので、自己責任で!)。また、XML形式でのバックアップはSQLデータベースサーバーに書き戻す時に問題が多々発生することがわかったので、SQL形式でバックアップするように少し見直した。

mysqldump -h [host-name] -u [user-name] --password=[your-pass] [dbname] > backup.sql
cd www
tar cvzf mediawiki.backup.tar.gz [wiki-directory]
wget https://releases.wikimedia.org/mediawiki/1.26/mediawiki-1.26.2.tar.gz --no-check-certificate
tar xvzf mediawiki-1.26.2.tar.gz
cp -a mediawiki-1.26.2/* /home/[user-name]/www/[wiki-directory]/.
cd [wiki-directory]/maintenance
php update.php

[2016年3月13日追記]

更にバックアップまわりを見直し。mysqldump--default-character-set--hex-blobの各オプションを追加した。

--hex-blobオプションは、バイナリカラムを16進数表記でダンプする。例えば、'abc'という文字列のバイナリは0x616263という文字列に変換される。ファイルサイズは大きくなるけど、特殊な文字を使っている場合のデータの欠落を防止することができる。

SQL形式のバックアップ・ファイルからデータベースにインポートできれば、元の状態を完全に復元できる。ただし、MySQLのバージョンが違っていたり、MediaWikiのバージョンが違っていてデータベース構造が変わっていたりすると復元できない可能性が高い。サーバーの引っ越しのためというより、同一サーバー、同一MySQL、同一MediaWikiにおける原状復帰のためのバックアップ・ファイルと割り切ったほうがいい。

念のため、MediaWikiのメンテナンス・スクリプトであるdumpBackup.phpを使用して全記事の全部の版をXML形式でダンプしておくコマンドを追加した。--fullオプションが全名前空間の全記事の全部の版を指定している。

このダンプでバックアップできるのは各種名前空間を与えられた文字だけのページだけで、画像などのメディア・ファイルはバックアップされない。また、データベース全体を復元させることはできないので、rebuildrecentchanges.phpといった別のメンテナンス・スクリプトを実行してテーブルに反映させる必要がある。手間はかかるが、MediaWikiのバージョンが変わっていても復元できる可能性が高いという利点がある。

mysqldump -h [host-name] -u [user-name] --password=[your-pass] --default-character-set=binary --hex-blob [dbname] > backup.sql
cd www/[wiki-directory]
php maintenance/dumpBackup.php --full > backup.xml
cd ..
tar cvzf mediawiki.backup.tar.gz [wiki-directory]
wget https://releases.wikimedia.org/mediawiki/1.26/mediawiki-1.26.2.tar.gz --no-check-certificate
tar xvzf mediawiki-1.26.2.tar.gz
cp -a mediawiki-1.26.2/* /home/[user-name]/www/[wiki-directory]/.
cd [wiki-directory]/maintenance
php update.php

dumpBackup.phpでダンプしたバックアップは、importDump.phpというメンテナンス・スクリプトで書き戻すことができる。--dry-runオプションをつけることで、XMLの解析だけして実際にはデータベースには反映せず、MediaWikiで受け付けられるバックアップ・ファイルかどうかをテストすることができる。

cd www/[wiki-directory]
php maintenance/importDump.php --dry-run < dumpBackup.xml

実行すると、次のようにメッセージが表示される。

100 (131.18 pages/sec 207.26 revs/sec)
200 (219.45 pages/sec 283.09 revs/sec)
300 (229.85 pages/sec 286.54 revs/sec)
400 (279.63 pages/sec 334.86 revs/sec)
Done!
You might want to run rebuildrecentchanges.php to regenerate RecentChanges

参考記事