最終更新:2016/09/06
いつの間にか、MediaWikiが1.23にアップデートされていた。1.22でもとりあえず困ってはいないんだけど、セキュリティの問題もあるし、いざという時にメンテナンスできないと困るので、練習のつもりでアップグレードに挑戦してみることにした。
MediaWikiの公式サイトにもアップグレード・マニュアルはあるんだけど、あらゆるバージョンや環境のことを網羅しようとした書き方になっているので、わかりやすいとは言えない。
さくらのレンタルサーバにMediaWikiをインストールしているという前提で、ざっとまとめてみた。おおまかに言うと、手順は次のとおり。
- 現在のデータベースのバックアップ
- 現在のMediaWikiのバックアップ
- 新しいMediaWikiのダウンロード
- 新しいMediaWikiの展開
- 新しいMediaWikiを現在のMediaWikiに上書き
- データベースを新しい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