何とかMovable Type 4からMovable Type 5にアップデートした
昨夜から(途中寝たが)今日の昼頃まで、ブログ作成で利用しているソフトウェア「Movable Type」のバージョンを4から5にアップデートする作業を行った。
以下は、その時の作業メモ。
(1)現在使用中のMovable Typeのデータベースをバックアップする。
私の場合、データベースにはMySQLを使用しており、サーバはXREAを使用している。XREAでは、MySQLのデータベースのバックアップはXREAの管理画面で簡単に実施できた。
(2)ホームページのドキュメントルート配下よりMovable Typeに関連するファイルすべてをバックアップする。
私の場合、FTPでファイル一式を自分のPCにダウンロードする、というバックアップを行った。
(3)Movable Typeの最新バージョンをSix Apart社のサイトよりダウンロードする。
2012年9月9日時点では2012年5月16日にりリースされた「Movable Type 5.14」が最新版のようだったので、同最新版をダウンロードした。
(3.5)既存環境のアプリケーションディレクトリ、スタティックディレクトリの内容を削除する。
これを実施していなかったので、私は(5)の作業で「Syck parser」が出て困った。
(4)ダウンロードファイル(Movable Type 5.14)を解凍し、解凍フォルダ直下にあるindex.html以外のファイルを全てサーバにアップロードする。
解凍フォルダ直下にあるindex.htmlはアップロード対象外にしないとまずい。
私は間違えてアップロードしてしまい、現在公開中のブログのトップページが、「Movable Type Publishing Platform」というタイトルのMovable Type初期インストール画面になってしまった。
しかも、それに気付くのに半日ぐらいかかっている。昨夜から今回の作業を実施し、途中でインストールに失敗してハマってしまい、眠くなって寝たので、気付くのが遅れた。
私のブログ記事をたまに読んでくれている方々、あるいは新規に訪問された方々は、「何これ?」とびっくりしたと思う。恥ずかしいし、申し訳ない。
(5)ブラウザで、ブログを更新する時のURLを開く
ブログを更新する時のURLとは、http://ドメイン名/Movable Typeをインストールしたディレクトリ/mt.cgiのこと。
URLを開いたら、ブラウザに、以下のエラーが表示された。
Got an error: Error reading /virtual/rnobu/public_html/nobuneko.com/blog/plugins/CommunityActionStreams/config.yaml: Syck parser (line 4, column 67): syntax error
このconfig.yamlというファイルのプログラムソースは予想通り見てもさっぱり分からないし、エラーメッセージをネットで探してみても、どうしてよいかがさっぱり分からなかった。
そこで、Movable Typeのオンラインマニュアルを再度よく見てみると、以下の作業を行っていないことに気付いた。
既存環境のアプリケーションディレクトリ、スタティックディレクトリの内容を削除
バックアップを作成した事を確認したら FTP プログラムで、アプリケーションディレクトリとスタティックディレクトリの内容を空にします。これは、以前のバージョンとの混在を防ぐためです。
(引用元:http://www.movabletype.jp/documentation/mt5/upgrade/mt4-to-mt5.html)
まず、アプリケーションディレクトリ、スタティックディレクトリという用語の意味が分からなかったので、調べた。
- Movable Typeをインストールしたディレクトリとは、Movable Typeをインストールしたディレクトリ
- スタティックディレクトリとは、アプリケーションディレクトリ直下のmt-staticディレクトリ
ということが分かった。
サーバから、アプリケーションディレクトリ、スタティックディレクトリに入っているファイル・フォルダ全てを削除し、再度、上記の(4)、(5)の手順を繰り返したら、インストール用画面が正常に表示された。
(6)Movable Typeのユーザ名、パスワードを入力し、データベースをアップグレードする。
ユーザ名、パスワードを入力すると、アップグレードの進行状況が以下のようにメッセージで表示される。
データベースをアップグレードしています・・・
データベースをバージョン 4.0070から更新しています...
MT::Entry::Summaryのテーブルを更新しています...
entry_revのテーブルを更新しています...
failedloginのテーブルを更新しています...
MT::Author::Summaryのテーブルを更新しています...
トラックバックのテーブルを更新しています...
この次に、以下のようなエラーメッセージが表示されてしまい、アップグレードの進行が停止してしまった。
アップグレード中にエラーが発生しました failed to execute statement CREATE TABLE mt_log ( log_id integer NOT NULL PRIMARY KEY auto_increment, log_author_id integer DEFAULT 0, log_blog_id integer DEFAULT 0, log_category varchar(255), log_class varchar(255) DEFAULT 'system', log_created_by integer, log_created_on datetime, log_ip varchar(50), log_level integer DEFAULT 1, log_message mediumtext, log_metadata mediumtext, log_modified_by integer, log_modified_on datetime ): Table 'mt_log' already exists at lib/MT/Upgrade.pm line 839.
「Table 'mt_log' already exists」(mt_logテーブルはすでに存在している)というエラーメッセージがから考えると、Movable Typeのデータベースにあるmt_logテーブルに何か問題があるようだ。
SSHでXREAのサーバに接続し、Movable TypeのMySQLデータにログインして確認することにする。
まず、show tablesコマンドで、テーブル一覧を確認する。
mysql> show tables;
+----------------------+
| Tables_in_rnobu |
+----------------------+
| mt_as_ua_cache |
| mt_asset |
| mt_asset_meta |
| mt_association |
| mt_author |
| mt_author_meta |
| mt_author_summary |
| mt_blog |
| mt_blog_meta |
| mt_category |
| mt_category_meta |
| mt_comment |
| mt_comment_meta |
| mt_config |
| mt_entry |
| mt_entry_meta |
| mt_entry_rev |
| mt_entry_summary |
| mt_failedlogin |
| mt_field |
| mt_fileinfo |
| mt_ipbanlist |
| mt_log |
| mt_notification |
| mt_objectasset |
| mt_objectscore |
| mt_objecttag |
| mt_permission |
| mt_placement |
| mt_plugindata |
| mt_profileevent |
| mt_profileevent_meta |
| mt_role |
| mt_session |
| mt_tag |
| mt_tbping |
| mt_tbping_meta |
| mt_template |
| mt_template_meta |
| mt_templatemap |
| mt_touch |
| mt_trackback |
| mt_ts_error |
| mt_ts_exitstatus |
| mt_ts_funcmap |
| mt_ts_job |
+----------------------+
46 rows in set (0.00 sec)
たしかに、「mt_log」テーブルが既に存在する(「Table 'mt_log' already exists」)ことを確認した。
次に、「mt_log」テーブルのカラム情報を確認するために、describeコマンドを実行する。
mysql> describe mt_log;
ERROR 1016: Can't open file: 'mt_log.MYI'. (errno: 145)
エラーになってしまった。
どうやら、mt_logテーブルは存在はしているが、壊れているようだ。
ここで思い出した。
Movable Type 4を長年利用してきたが、いつの間にか、Movable Typeのログが記録されなくなったという不具合を抱えていたことを。
ログが記録されなくなったのは、ログを記録するためのテーブル「mt_log」テーブルが壊れてしまったからかもしれない。
mt_logテーブルを削除したら直るかもしれない、と思い、drop tableでmt_logテーブルを削除してみた。
mysql> DROP TABLE mt_log;
Query OK, 0 rows affected (0.14 sec)
これで、mt_logテーブルが削除された。
再度、(5)の作業を実行すると、以下のように、アップグレード作業が無事に完了した。
Movable Type アップグレードを完了しました!
データベースをバージョン 4.0070から更新しています...
トラックバックのテーブルを更新しています...
template_revのテーブルを更新しています...
フィルタのテーブルを更新しています...
ウェブサイトのテーブルを更新しています...
ブログ記事のテーブルを更新しています...
ブログ記事のテーブルを更新しています...
セッションのテーブルを更新しています...
ユーザーのテーブルを更新しています...
ユーザーのテーブルを更新しています...
テンプレートのテーブルを更新しています...
権限のテーブルを更新しています...
コメントのテーブルを更新しています...
ブログ記事のテーブルを更新しています...
アイテムの関連付けのテーブルを更新しています...
ジョブエラーのテーブルを更新しています...
ジョブのテーブルを更新しています...
コメントのテーブルを更新しています...
ブログr_nobuホームページ(ID:1)の更新通知先からテクノラティを削除しました。
MTニュースのキャッシュを破棄しています...
権限を再構築しています... (100%)
MTニュースのキャッシュを破棄しています...
既存のロール名を更新しています...
ウェブサイト用の新しいロールへ変換しています...
記事に作成者のIDを設定しています... (100%)
mtview.phpをMT5で利用できるように移行しています...
システム管理者用の新しい権限を設定しています...
himenoを設定しています...
ダッシュボードからウィジェットを削除しています... (100%)
コメンターの権限を再設定しています...
既存のロール名を更新しています...
テーマ用の新しいロールへ変換しています...
アイテムパス情報を更新しています...
ブログのカテゴリとフォルダの順番を設定しています... (100%)
ブログを分類しています... (100%)
ダッシュボート設定を移行しています... (100%)
既存のブログをウェブサイトで管理できるように移行しています。
作成されたウェブサイト: https://nobuneko.com/
r_nobuホームページブログ(https://nobuneko.com/blog/)をnobuneko.comウェブサイト下に移動しました
カスタムフィールドの古い並び順を削除しています...
新しいテンプレートコメント一覧を作成しています...
新しいテンプレートIPアドレスのロック通知を作成しています...
新しいテンプレートユーザーアカウントのロック通知を作成しています...
不要なカスタムフィールドを削除しています。
データベースをバージョン5.0030にアップグレードしました。
プラグイン'Professional Pack'をバージョン1.63 (スキーマバージョン1.54)にアップグレードしました。
アップグレード途中で、2回も「うぉー、勘弁してくれ!」というエラーが出て、「無事にアップグレードを完了できるのだろうか」と、かなりドキドキしてしまったが、何とかアップグレードできたので嬉しかった。