2017年8月にheteml上で動作しているこのブログをMovable Typeを5から6にアップグレードした。
色々ややこしかったので、少し記憶が曖昧だがメモしておく。
うまくいかなくても責任は負いかねますので、自己責任で参考にして下さい。
簡単に済まなかったいくつかの理由・・・
とりあえず、Movable Type(以降MT)の「バックアップと復元」を使ってサクッと終わらせようと思ったが、タイムアウトで終了せず。php.iniでタイムアウト時間を延長したが、やはりタイムアウト。
ということで、「MySQL のバックアップ」で対応することにする。
MT6は、DBが「MySQL 5.x」以上が必要とのこと。(Movable Type 6 へのアップグレード)
本ブログで使っていたDBはMySQL 4。ということで、phpMyAdmin(以降PMA)からDBをエクスポートしてMySQLをバージョンアップしようとしたが、「2016/07/27 20:08 「旧バージョン」のデータベース管理ツール『phpMyAdmin』 提供終了のお知らせ」とのことで、MySQL 4にPMAでアクセスNGなことが判明(涙
簡単に済ませるつもりが、そうは問屋が卸さないらしい・・・。
仕方がないので、「SSH接続でMySQL 4からエクスポート」+「MySQL 5.6にインポート」してから、「MT6にアップグレード」することにする。
MySQL 4からエクスポート
まず、既存ブログのデータをエクスポートする。
話が前後するが、後のインポート工程で以下エラーが出たので、旧MTのコンパネからトラックバック、操作ログ系の情報を削除しておく。(これで出力されるSQLが90MBから30MBまでサイズダウンできた)
#1064 – 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 ‘2007-03-09 11:35:05′,NULL,'2007-03-09 20:35:05′,NULL,0,1,'24469′,'ping','new'),(‘ at line 1
続いて、以下情報を参考に作業を進める。
Tera Termとか久しぶりだなと思いつつ、SSH接続でいきなりエラー発生(涙
Windowsコンパネで「Windows の機能の有効化または無効化」でTelnetクライアントを有効にする必要あり(要再起動)とのこと。再起動しないと以下のエラーが発生する。
とりあえずSSH接続できるようにして、上記サイトに書かれていた以下コマンドを入力して実行。
mysqldump --single-transaction -u {mysqlのアカウント名} -p{mysqlのパスワード} -h {mysqlサーバー名} {対象DB名} > {出力先.sql名}
エラー(涙
mysqldump: Error: ‘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 ‘SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILE' when trying to dump tablespaces
どうもver.5でSQLコマンドが変わっているらしい。どこが変わったのかググってもよくわからず・・・。(さくらインターネットではver.4用のコマンドが別途用意されているっぽいが、hetemlにはそういう便利ツールは無さそう・・・)
とりあえずショートハンドを使わず、ベタにコマンドを打ってみる。
mysqldump --single-transaction --user={mysqlのアカウント名} --password={mysqlのパスワード} --host={mysqlサーバー名} {対象DB名} > {出力先.sql名}
再度エラー発生(涙
しかしサーバ上にSQLが出力されていたので、不安な気持ちを抱えつつ、出力したSQLデータをダウンロードして先に進む。
MySQL 5.6へのインポート
エクスポートしたSQLをPMAを利用して、新DBにインポートしていく。
まず、エクスポートしたMySQL 4のSQLデータには、以下修正が必要(データベースの移行方法)とのことで、さくっと置換。
- MySQL5以上のバージョンでは、SQLに変更が発生しております。以下の記述内容はあらかじめ修正をお願いします。
- 『TYPE=MyISAM』という記述は、『ENGINE=MyISAM』へ修正してください。
- 『timestamp(14) NOT NULL』という記述は、『timestamp NOT NULL』へ修正してください。
次に、インポート先のDBをhetemlのコンパネから新規作成。hetemlのphpMyAdminのインポートタブにアクセス。
- フォーマット:SQL
- 文字:UTF-8
- SQL互換モード:「MYSQL40」
上記設定して、インポート実行+成功。
旧ブログの維持
DBが正常出力できているか不安だったので、ログの完全消失した場合の予防として、旧ブログを残したまま、新MTに切り替えようと考えたのだが、「データベースのダンプデータによる移行」によると、「※移行先サーバーのアップロード先は、移行元サーバーと同じディレクトリパスに揃えてください。」とのことで、同サーバ上で別ディレクトリに新MTを展開するのは無理らしい。
ということで、手間なのだけど、旧ブログを別ディレクトリ(blog-oldなど)で動作する状態にした上で、新MTを現存場所に展開することにする。(これで最悪アップグレードで過去ログが消失したとしても、旧ログの実体だけは別物として残しておけるという算段)
- 旧MTコンパネから「ブログURL、ブログパス、アーカイブURL、アーカイブパス」の出力先を変更。
- 画像ファイルなど旧ブログディレクトリ内のデータ一式を、別ディレクトリ(blog-oldなど)にコピー。
以上で旧MTで動作する旧ブログの展開場所の移動完了。
旧MTから旧ブログの再構築が成功したので、新MTの展開に進む。
Movable Type6へのアップグレード
やっとこ下準備完了。MTのアップグレードに取り掛かる。
- 「Movable Type 個人無償版ダウンロード」からMT6をダウンロード
- サーバに新MT用のディレクトリを新規作成。展開したMT6アプリデータをアップロード。
続いて、「アップグレード時に、新しいディレクトリにコピーするファイル」を参考に、旧MTの設定ファイルを新MTディレクトリにアップ。
- mt-config.cgi
- パス関係、接続DB情報を修正
- plugins/{追加したプラグイン}
- 旧MTコンパネの [ツール / プラグイン]でバージョンを確認(私の場合はMT6に存在しないプラグインは「Keystrokes」「mixiComment」の2つ。「Keystrokes」はMT6未対応、「mixiComment」は使ってなさそうだったのでコピーせず。)
- mt-static/plugins/{追加したプラグイン}
- 私の場合はMT6に存在しないプラグインは「mixiComment」のみ。これも使ってなさそうだったのでコピーせず。
- mt-static/support
- themes/{追加したテーマ}
- 旧ブログで使っていたテーマだけコピー。
これらが終了したら、新MTディレクトリにブラウザでアクセス。
自動でアップグレード処理が実行されるので、タバコを吸いながら待つ。
動作テスト
正常に動作するか不安なため、投稿と再構築をテスト。
新規エントリー作成テスト
エラー発生(涙
テンプレートに含まれる「MTKeystorokes」関係のコードを「Movable Typeのコメントスパム対策プラグイン「MT-Keystrokes」」を参考にして除去(わたしの場合はEntryテンプレートのみ)。
再度テスト投稿実行。問題なし。
コメント投稿テスト
投稿にコメントしてみる。問題なし。
再構築テスト
全体を再構築してみる。問題なし。(MT5では1時間必要だったが、MT6では37分に短縮)
旧MT、旧ブログの掃除
新MT、新ブログともに動作に問題なかったので、旧MT、旧ブログ、旧DBを削除。
(これをサボると、1年後にサーバ内を見た時に色々と混乱するので、ここ大事かなと・・・)
以上で終了!
hetemlからの通知メールとかきちんと読んでおくべきだなと反省。