SILENTSHEEP*NET > blog化作業録 > 2008年 > データベースのMySQL移行
データベースのMySQL移行
MySQLで500エラー解消?
MT4に移行してから再構築自体は問題なく(特にMT4.2では10~30秒の速さで)できるのに、新規エントリの投稿とコメントの投稿が首尾良くゆかない。待たされた挙げ句に必ず500エラーを返す。投稿自体はできているがPingが飛んでない、トラックバックも当然できない・・・等の不具合多数。
もうサーバーを替えるしかないのか! と移転先もあれこれ物色してほぼ決めかけていた。一応、その前にデータベースをSQLiteからMySQLへ移行してみたら半年来の悩みがすっきり解決できた!(かもしれない・・・今のところ)ので、500エラーに悩んでいる莫大な(!)同士に参考になればと思い手順をメモ。
1 SQLite環境のバックアップ
(1) サーバー上のdbをバックアップ
SQLite最大の利点? サーバー上のdbをそのままバックアップ(=ダウンロード)。これは簡単に完了。文字通りのバックアップで実際に使うことはない。あくまで念のため。
(2) MT4ツールのバックアップ
MT4で導入された強力な機能、ブログの完全バックアップ→復元を利用。以下のマニュアルページを参考に。
ブログの完全バックアップと、データベースのバックアップ | Movable Type 4 ドキュメント
バックアップしたブログの復元 | Movable Type 4 ドキュメント
複数ブログも一括してできるようだけれど、当サイトのように11個もの数になっているとサーバーの弱さで完了できず。ブログ別にそれぞれバックアップさせる方が後の処理も確実と思う。
復元の時に気付いたのだけれど、膨大に積もっているログまでバックアップ&復元してくれる必要はないので、要らない(ほとんど見ることもない)ログはさっと消してからやった方が少しは復元処理も軽くなるはず。
(3) データのエクスポート
(2)でうまくゆけば(1)とこの(3)は不要なのだけれど、ここが肝心かつ、こいつが結構、頼りになるすぐれもの。データのエクスポート&インポート。
以前、別のレンタルブログ(Seesaa)から移行したときやMT3→MT4へのアップグレード、その他、エントリの属性を変えたいときもコントロールパネルでトロトロやるより、テキストファイルゆえ一気に処理できるのが非常に重宝する。今回も活躍。
2 新規MTの立ち上げ
(1) サーバー上のデータベース作成
契約サーバーのコントロールパネルからMySQLを使える状態にしてサーバー名、データベース名、ユーザー名、パスワード・・・等を控えておく。
(2) mtディレクトリの新旧併存
サーバー上に置いているmtディレクトリをコピーして、新規分にMySQLを導入してゆく。従来分のディレクトリ(フォルダ)名はmt0等、一時的に変えておく(処理後は削除)。cgiのパーミッションもサーバーに合わせて変更。
こうしておけば各データベースを対象とする新旧2つのMT操作ができて自由に処理の出入りができる。もちろん従来分はmt-config.cgi内のパス名を変更後のディレクトリ名に修正しておくのとサインイン時のアドレスも当然、変わってくるので注意。
(3) mt.cgiの実行
新規分 mt.cgi を実行・・・すると、初めてMovable Typeをインストールした時に見たはずの懐かしい「ようこそ」画面が再び現れてくる。データベース設定の種類で「MySQLデータベース」を選択し、先ほどのデータベース名を入力。
その後も一度経験したはずの処理を進めてゆくとMy First Blogが作られてめでたくインストール完了! 以後のデータがMySQLに置かれる(ハズだ)。
3 バックアップブログの復元
(1) システムメニューのツール→復元
1の(2)で取ったバックアップの復元処理。複数ブログで運用しているときは個別のブログごとにやった方がいい。マニュアルではサーバー上のimportディレクトリに置けば一気にできるということなのだけれど、ローカルに落としたファイルを一個ずつ指定してアップロードしても処理速度に差はなかった(どっちにしても次の途中ストップ、未完了になった)。
(2) 復元ができず(途中で止まる)、でも大丈夫
この復元、素晴らしい機能なのだけれど、これまた同士の多くが躓く(というより厚い壁に遮られる)のは、バックアップはできても復元はできないという使えなさ。これまたサーバーの非力さが原因。そもそもサーバーが弱いから作業していることなので妙に納得できたりもする瞬間。
復元しようとする内容(エントリ数、テンプレート数等)にもよるだろうけれど、当サイトの11ブログ中では4つが完了できたものの7つはゴール果たせず。マラソンの途中関門みたいにタイムアウトに遮られる。
ただ、全く復元できていないわけでなく、エントリが途中までしか入ってないとかテンプレート周りが不完全等といった具合で、次の処理をちょっと付け足せばいい。不完全なりに無駄でなく大いに助かる。
(3) データのインポート
そこで1の(3)で取っておいたエクスポートファイルの出番。
エントリが全部、入ってない、カテゴリ属性を引き連れてない、コメントが付いてきてない・・・等の場合、いったんコントロールパネル上のエントリ(ブログ記事)を全削除してからツール→インポートでテキストファイルを一から全部読み込んでやる(あるいは差分のみインポートしてやる)。
前回、記したようにインポート時はファイルのエンコードや改行コードに注意。作業録は他人(ひと)のためでなく一番、我が身のためになるもので、何度も忘れる本人がいつも読み返している。
(3) その他の不備修正は随時、手処理で
画面を見ていると復元はテンプレート→エントリ→トラックバック、コメント・・・といった順で進めているようなので、エントリの復元途中に止まったなら、その前段階のテンプレートまではきちんと入ってる(はず)。
実際にこのサイトでもテンプレートは問題なく復元されていた。テンプレートはブログ間でリンクしモジュールともども使い回している(共有化している)とはいえ、ブログごとに再設定する手間が省けて大いに助かった。
結局、復元できていなかったのは、エントリ、コメント等以外ではアーカイブマッピングの設定のみ。アーカイブマッピングの方は元々、このサイトが余計なアーカイブを持たずに1個しか紐付けていないので作業は一手間のみ。
やっとノーマルに、でも・・・
以上にて作業終了。恐る恐る再構築ボタンを押して無事にできればMySQLへの移行完了。昨日の新規エントリ投稿でもうんと久しぶりにPingの飛んでる確認画面を見ることができ無事、エラーなく終えることができた。トラックバックもOK! で感動。
今さらながら、これまでPingが飛ばずに終わっていたのは記事投稿の都度、何とも忸怩たる思いにさせられていた。サーチエンジン対策というほどのつもりはなくても、「エントリを投稿したよー」という声を送っているのだから、きちんと届いて受け止められていてほしいもの。
ただまあやはり万々歳とまではゆかないよう。
2008-11-21









