| « AD.JPがスパムリストに加えられた | b2evolutionをTechnoratiのTagに対応 » |
MediaWikiを1.5.8から1.6.3にアップグレード
以前、書いた
では、インストールするのに利用したwww/mediawikiのportは、1.5系列のものを扱っていましたが、先日、1.6系列のものに切り替わったようなので、アップグレードしてみました。
1.5系列間でのアップグレードは、ほとんど(上書きするだけで)移行に問題ありませんでしたが、1.5系列から1.6系列への移行は、テーブル構造が若干、変更されたようで、特別な作業が必要になります。
主な手順は、
を参照して下さい。
以下は、私が行った作業メモです(問題があったので、手順通り行わないように)。
Follow up:
事前準備
まず、www/mediawikiのportを更新する前に、
- LocalSettings.php
- 画像等、その他必要なファイル
- MySQLサーバのデータ
をバックアップしておきます。
更新作業
portの更新自体は、普通通り、
# portupgrade www/mediawiki
等のようにすれば、問題ないです。
ただし、その後、更新したMediaWikiのコンテンツを表示しようとしても、エラーになってしまい表示できません。
データベースを更新する作業が必要になります。
インストール時のように、configディレクトリにアクセスし、ブラウザ上から設定をすませ、更新するという方法もありますが、今回は、コマンドライン上から行いました。
AdminSettings.phpの作成
コマンドラインから作業するためには、まず、データベースのユーザ名とパスワードを記述したAdminSettings.phpというファイルを作成しておく必要があります。
mediawikiのトップ ディレクトリにAdminSettings.sampleというファイルがあるので、それを上記の名前でコピーし、ユーザ名等の箇所を修正します。
update.phpの実行
AdminSettings.phpの準備が出来れば、maintenanceのディレクトリに入り、そこにあるupdate.phpを実行します。
# cd maintenance # php ./update.php
ただし、MediaWiki用のデータベースのDEFAULT CHARACTER SETが1バイト以上の文字コード(例えば、utf-8等々)だと、
Creating job table...Query "CREATE TABLE `mw_job` ( job_id int(9) unsigned NOT NULL auto_increment, job_cmd varchar(255) NOT NULL default '', job_namespace int NOT NULL, job_title varchar(255) binary NOT NULL, job_params blob NOT NULL default '', PRIMARY KEY job_id (job_id), KEY (job_cmd, job_namespace, job_title) ) TYPE=InnoDB " failed with error code "Specified key was too long; max key length is 1024 bytes (db1.xdelta.net)".
とエラーになってしまい、job
テーブル(mw_は自分でつけた単なるPrefix)が作成できませでした*1。
そこで、
--- maintenance/archives/patch-job.sql.orig Fri Apr 14 06:04:57 2006 +++ maintenance/archives/patch-job.sql Fri Apr 14 20:35:59 2006 @@ -17,4 +17,4 @@ PRIMARY KEY job_id (job_id), KEY (job_cmd, job_namespace, job_title) -) TYPE=InnoDB; +) TYPE=InnoDB DEFAULT CHARACTER SET latin1;
のように修正したところ、とりあえず通りました*2。
- *1 ちなみにMySQLサーバ側の文字コードはutf8。
- *2 これはその場しのぎの回避法に過ぎず、おすすめできない。
refreshLinks.phpの実行
最後の方で、
Done. Please run maintenance/refreshLinks.php for a more thorough templatelinks update.
とメッセージが表示されたので、指示通り、
# php ./refreshLinks.php
を実行してみたら、処理中に、
Refreshing link table. Starting from page_id 1 of 1620. 100 200 300 400 500 600 700 800 900 1000 1100 1200 A database error has occurred Query: SELECT 1 FROM `mw_job` WHERE job_cmd = 'refreshLinks' AND job_namespace = '0' AND job_title = 'FreeBSD/DVD-R���若�� AND job_params = '' Function: Job::insert Error: 1267 Illegal mix of collations (latin1_bin,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' (db1.xdelta.net) Backtrace: GlobalFunctions.php line 602 calls wfbacktrace() Database.php line 473 calls wfdebugdiebacktrace() Database.php line 419 calls databasemysql::reportqueryerror() Database.php line 806 calls databasemysql::query() JobQueue.php line 130 calls databasemysql::select() JobQueue.php line 28 calls job::insert() LinksUpdate.php line 105 calls job::queuelinksjobs() LinksUpdate.php line 68 calls linksupdate::doincrementalupdate() refreshLinks.inc line 93 calls linksupdate::doupdate() refreshLinks.inc line 64 calls fixlinksfromarticle() refreshLinks.php line 22 calls refreshlinks() <!-- Served by www2.xdelta.net in 31.74 secs. -->
と案の定、怒られた*3。
どうやら、テーブルを修正しなければならないらしい。
- *3 ちなみに文字化けしている部分は、
FreeBSD/DVD-Rを焼く
というUTF-8な文字列。端末の文字コードがEUC-JPだったので化けたに過ぎません。
該当テーブルを修正
コマンドmysqlを実行し、
mysql> ALTER TABLE mw_job default charset=utf8; mysql> ALTER TABLE mw_job MODIFY job_cmd varchar(255) character set utf8 NOT NULL default '';
と、テーブルおよびjob_cmd列の文字コードを変更した際には問題なかったけど、
mysql> ALTER TABLE mw_job MODIFY job_title varchar(255) character set utf8 binary NOT NULL default ''; ERROR 1071 (42000): Specified key was too long; max key length is 1024 bytes
と、job_title列の文字コードをutf8に変更しようとすると、作成時と同じエラーになった。
しょうがないので、
mysql> ALTER TABLE mw_job MODIFY job_title varchar(63) character set utf8 binary NOT NULL default '';
のように数値を修正して、列属性を変更しておきました。
以上で、先ほどの
# php ./refreshLinks.php
は、通るようになりました。
最初から、このようにテーブルを作成しておいた方が良かったのかも知れない*4。
ちなみに、
mysql> select version(); +-----------+ | version() | +-----------+ | 4.1.18 | +-----------+ 1 row in set (0.00 sec)
という環境です。
- *4 後から、考えると、インデックスの長さが足りないだけなので、別に列属性を変更するまでもなく、最初のテーブル作成時に、
--- maintenance/archives/patch-job.sql.orig Fri Apr 14 06:04:57 2006 +++ maintenance/archives/patch-job.sql Sat Apr 15 17:44:19 2006 @@ -16,5 +16,5 @@ job_params blob NOT NULL default '', PRIMARY KEY job_id (job_id), - KEY (job_cmd, job_namespace, job_title) + KEY (job_cmd(255), job_namespace, job_title(63)) ) TYPE=InnoDB;
のようにキーの長さを指定しておけば良かっただけかも知れない。
備考
現在、様子見です。慎重な方は、/usr/ports/www/以下に、
という各バージョンに特化したportsが用意されているので、こちらを使った方が無難かも知れません。
アップグレードしようとする前に、MySQLサーバ上のデータはバックアップしておいて下さい。
Trackback address for this post
Trackback URL (right click and copy shortcut/link location)
1 comment, 4 trackbacks
なお、MySQLデータベースの文字コードがUTF-8な場合、上記のような問題が発生するのは、既知のようです。併せて、
- Bug 4445 - Specified key was too long
- MySQL Bugs: #4541: "Specified key was too long; max key length is 1000 bytes" with utf8
の方も参照して下さい。
databases/mysql41-{server,client}のportsを4.1.18から4.1.19に更新。
/usr/ports/UPDATINGの20060714によると、
www/mediawiki version is 1.7 now. 1.6 version was preserved on www/mediawiki16 port.
と、www/mediawikiのportは、1.7系列のバージョンのものに切り替わったらしい。
しかし、...
xoopsを入れてから一番最初に入れたモジュールはmediawikiだったんですが
これがまた簡単には入らなくて苦労しました。
環境は
さくらサーバ レギュラー
xoops-cube 2.0.16a
mediawiki 1.6.7
です
...
www/mediawikiのportが1.7.1から、1.8.2へと更新されていたのでアップグレードしました。以下はそのメモです。
公式な情報は、
Manual:Upgrading to 1.8 - MediaWiki
に記載されていますので、まずそ...
This post has 37 feedbacks awaiting moderation...