サーバ移転 その1

 自分自身の備忘録的に、先週の土曜日にやったサーバ移転の話しを書いておこうじゃないか。

 某メディアサイトの移転で、F社のレンタルサーバを利用していたけどPerlModuleのインストールが出来ないだとか、アクセス集中でたまに繋がらなくなる事がある為、S社の専有サーバに移転するという案件。メディアサイトなので1日に何件か情報の更新があるのですが、CMSにはMT4を使用。ブログ的な使われ方のコンテンツもあるので、1日の更新件数は多いときは10件前後。総エントリー数は数千件と、まあまあのサイズ。アクセス数は日によってばらつきがある模様だけど、集中したときには本当に繋がらなくなっちゃうとか。画像が多いので、その辺も影響があるのかもしれないですな。ちなみに、全体の容量は2GB弱。

 で、MTの移転はここ数年で10数例やっており、MT2.6からMT4へのバージョンアップ&移転なんていう際物までやっているので、正直怖いものはない。ハズだったのですが、、、。

 まずは、現在運用中のサーバ関連情報収集から。F社のレンタルサーバの中では比較的上位のプランで、コストパフォーマンス的には悪くないんだけど、カスタマイズ性が本当に低い。ImageMagickがつかえなんて、ちょっとあり得ないよねぇ、、、。

 コントロールパネルが一通り揃っておりphpMyAdminが使えるので、MTで使用しているMySQLをdumpして新サーバでrestoreが最初に考えた移転方法。試しにphpMyAdminからdumpしてみるも、どうも文字コードの問題でうまくdump出来ない。文字コードを色々いじったりしてみたけど、どうにもすっきりと移行できず、色々文字変換をかけると移転後のチェックで膨大な時間が取られてしまうので、この移転方法は諦めました。

 次に考えたのは、MTのバックアップ機能を使う手法。最初は全てをバックアップしてみようと思い、[システムメニュー]→[ツール]→[バックアップ]からバックアップをしようとするが、Webサーバ側のタイムアウト制限でバックアップできず。それじゃー、一個一個のブログをバックアップしようというわけで、[各ブログ]→[ツール]→[バックアップ]からバックアップを試みる。一つ一つのブログのエントリーは少ないから何とかなるかと思ったけど、5千件を超えるエントリーを誇るブログがタイムアウト、、、。昼間のアクセスが多い時間にやっていたので、夜中に試すもタイムアウト。早朝に試すも、タイムアウト。いつ試してもタイムアウト、、、むっきーーー!!

 この時点で結構途方に暮れちゃったんですよね、暮れますよね? 最悪、今アップされているデータを解析して、MTのデータベースに直接書き込んでやるか、とか(無茶です)。

 原点に戻ろうということで、現在使用しているサーバを色々と調べていると、ホームディレクトリー直下にMySQLのデータディレクトリが存在していることが判明。もしかしたら、データベースファイルをそのまま新サーバに移動させたら、そのまま動いたりして? とか、思いついて実際にやってみると、ビンゴ! 動いたぜーーー、実際にMTで動作をチェックしたけど文字化けもなく、何事もなかったかのように動作してるし、、、。やー、PostgreSQLでは何度かやったことがあったんだけど、MySQLでもできてよかったーーー。細かいバージョンは違ったんだけど、同じMySQL5.0系だったのでそのまま動いちゃいました。
 それでもちょっと怖かったので、1度 DBをmysqldumpでdumpして、DBをDROPしてから、再度DBをrestoreしました。問題ないみたい。すげー、助かったぁ~。ちなみに、データベース名でディレクトリが出来ていたので、それを旧サーバから新サーバのMySQLデータベースディレクトリに放り込んだだけです。MyISAMだったのも助かった要因かもしれないね。

 というわけで、MT移行の方針も決定し実際の移転作業を行いました。


 サーバ移転作業をやる場合、目茶苦茶大きくてテストが出来ないような場合を除いては予行演習を何度か行います。今回も予行演習は何回かやっていて、流れ的には下記をイメージしていました。

1. 旧サーバメンテナンス表示開始
2. DNS Aレコード変更
3. 旧サーバ最新コンテンツ取得開始(3時間程度)
4. 旧サーバデータベースファイル取得
5. 新サーバデータベースファイル設置
6. 新サーバデータベース再構築作業(ファイル設置→dump→drop db→関連ファイル削除→restore)
7. 新サーバデータベース確認作業
8. 新サーバMT動作チェック作業
9. 新サーバコンテンツ確認(更新漏れチェック)
10. メンテナンス表示解除
11. 新サーバへのアクセス開始

で、1→7までは予定時間よりもかなり短く進められ(3の前に、事前にコンテンツは取得済みで、実際の移転の際には差分だけ手動でアップ)、予定の6時間が2時間程度で終わる予定でした。が、そこにはサーバ移転の常、罠がありました、、、。

 8の新サーバMTの動作チェックは問題なかったのですが、トップページの表示がなんか崩れる、、、なんか3件しか表示されないはずの場所で6件エントリタイトルが表示されてしまう現象が発生しました。その部分のMTタグを見てみるとmt:MultiBlogを使用して複数ブログから最新の3件を取り出す設定になっていました。

<mt:MultiBlog mode="context" include_blogs="1,2">
<mt:Entries lastn="3">
<li><a href="<$mt:EntryLink$>"><$mt:EntryTitle$gt;</a></li>
</mt:Entries>
</mt:MultiBlog>

mode="context"しているので、ちゃんと二つのブログから最新の3件を取り出してくれるはずなのですが、動作的にはそれぞれのブログから最新の3件を取り出しちゃっているようです、、、こまった。旧サーバでは問題なく動作していたのですが、なぜか新サーバでは異常な動作になってしまっている、、、。DBとかそういう問題とかじゃないのでかなり弱りましたが、色々調べるとmt:MultiBlogEntriesというタグでも同様の動作が可能だと判明、下記の様に書き直したところ無事動作を確認できました。

<mt:MultiBlogEntries mode="context" include_blogs="1,2" lastn="3">
<li><a href="<$mt:EntryLink$>"><$mt:EntryTitle$></a></li>
</mt:MultiBlogEntries>

 ちなみに、この動作不具合は後にMT3のMultiBlogのプラグインが残っていたのが原因だったとの連絡を頂きました。そっかー、MT3時代は標準プラグインじゃなかったもんね。

 というわけで、なんとか予定移転作業時間を1時間残して移転完了となりました。よかったよかったー。