Home > Movable Type > phpMyAdminでのサーバ間データ移行

phpMyAdminでのサーバ間データ移行

  • Posted by: 南野 せな
  • 2006年11月30日 05:55
  • Movable Type

現在、sena.jpドメインをC'S SERVERPersonal(独自ドメイン)、このWeblogでも使用しているsena.toドメインをSAKURA Internetのスタンダードで運用しています。それを新しく契約する予定のSTEP SERVER(ステップサーバー)にてサイトを一括管理しようと考えています。サーバ移転にあたり、このWeblogシステムのMovableTypeの移転をデータベースのデータ毎移行させようと考えています。

MovableTypeにはデータのインポート&エクスポート機能が備わっていますが、このエクスポート機能ではトラックバックの受信記録が残らないので、そのままの環境を維持するにはデータベースのデータごとの移行が一番良いと思いました。新旧どちらのサーバでもMySQLを使っており、phpMyAdminがデフォルトインストールされているので、phpMyAdminでインポート&エクスポートの試行結果を残しておきます。

*データベースサーバ環境

SAKURA Internet

  • MySQL 4.0.27
  • phpMyAdmin 2.6.1-pl3

STEP SERVER(ステップサーバー)(本移転前事前テスト環境)

  • MySQL 4.0.22
  • phpMyAdmin 2.9.0.2

共通事項、その他

  • データベースは1契約につき1つ
  • テーブルの作成数に制限は無い
  • STEP SERVERの本移転サーバはMySQL4.1.xとなる見込みだが、問題は無いと思われる

*phpMyAdminでのバックアップ方法

phpMyAdminでデータベースのエクスポートの方法はいくつかあり

  • データベースの丸ごとエクスポート
  • テーブル毎にエクスポート
  • 複数のテーブルをまとめてエクスポート

という方法がある。

しかし、インポートする時にファイルのアップロードサイズ制限があり、1データベースで制限を超えるような場合はテーブル毎か、制限サイズ内で複数のテーブルをまとめてエクスポートする必要がある。今回の私の場合はまさにこの状態でした。

*オーバーヘッドの確認

もし、データベースのテーブル内にオーバーヘッドが存在するようであれば、インポート時に成功しない可能性があるので、エクスポート前にオーバーヘッドを改善しておく事をお勧めします。

オーバーヘッドの確認方法は、ログイン後のphpMyAdmin内に左サイドのメニューからデータベース名のリンクをクリックし、データベーステーブルを表示させます。テーブルの一覧表示されると「テーブル」、「実行」、「レコード」、「フィールドタイプ」、「サイズ」、「オーバーヘッド」表示されます。

「オーバーヘッド」欄にて全部「-」と表示されていれば問題ありませんが、もし、数値が表示されているテーブルがあれば、オーバーヘッドがあります。

オーバーヘッドが見付かった場合、数値のリンクをクリックするとテーブルの詳細情報が表示されます。そのページの真ん中くらいに「ディスク使用量」の項目があり、項目の一番下に「テーブルを最適化します。」のリンクがあるのでクリックします。「実行された SQL クエリー」の「Msg_text」のステータスが「OK」となっていれば成功です。

オーバーヘッドのテーブルが複数存在する場合は、テーブル一覧の画面に戻り、上記の手順を繰り返します。テーブル一覧にてオーバーヘッド欄が全て「-」になれば移行準備環境です。

*データベースの丸ごとエクスポート

データベースのバックアップやデータの移行を行う時は、このデータベースの丸ごとエクスポートが一番良いと思われますが、私の場合、容量の問題でこれは使えませんでした。

移転先のデータのアップロードサイズが2MBまでとなっていましたが、移転前のデータベースのサイズは12MB...。ダメもとでアップロードはしてみましたが、サーバのタイムアウトになるので、更にチャレンジして圧縮して2MB以内に収めてアップロードしましたが、サーバの反応が返ってこないという状態に陥ってしまったので、丸ごとエクスポートは諦めました。結局は圧縮しても元サイズが元サイズだから、解凍した容量に処理しきれなかったのでしょう。データ圧縮については後で記述します。

データベースの丸ごとエクスポートするにはログイン後の画面で「エクスポート」となっているリンクをクリックします。エクスポートするデータベースを選択し(多分1つ)、「SQL オプション」にて「DROP TABLEを追加」と「IF NOT EXISTSを追加」と個人的推奨で「作成/更新/検査の日付を追加」にチェックを入れます。

最後に「ファイルで保存する」にチェックを入れ、「実行」ボタンを押すと、ファイル保存のダイアログが出てくるので、適当なところに保存しましょう。ファイル名はデフォルトで構いません。

これでエクスポートし、ローカルに保存したファイル容量が移転先のアップロードサイズ制限に引っかからなければ問題ありません。

以上で、データベース丸ごとエクスポートは完了です。

*テーブル毎にエクスポート

データベース丸ごとエクスポートにて容量の制限に引っかかる場合は、テーブル毎にエクスポートします。

phpMyAdminの画面でログイン後に左サイドのデータベース名をクリックします。テーブルの一覧が表示された上に「エクスポート」という名のリンクがあるのでクリックするとエクスポート画面が出てきます。

「エクスポート」欄にエクスポート可能なテーブル名が表示されるので、エクスポートするテーブル名を選択し、「SQL オプション」にて「DROP TABLEを追加」と「IF NOT EXISTSを追加」と個人的推奨で「作成/更新/検査の日付を追加」にチェックを入れます。

最後に「ファイルで保存する」にチェックを入れ、「実行」ボタンを押すと、ファイル保存のダイアログが出てくるので、適当なところに保存しましょう。ファイル名はテーブル名が重複しないで分かりやすいので良いかもしれません。

同じ手順でテーブルの選択を変更してエクスポートします。以上でテーブル毎のエクスポートが完了です。

# データベース名をクリックする時に、テーブル名をクリックしてそこから個別のテーブルをエクスポートしても良いです。そっちの方がテーブル名=ファイル名となるのでいいかも?

*複数のテーブルをまとめてエクスポート

上記のテーブル毎のエクスポートですが、エクスポートするテーブルを選択する際に任意のテーブルを複数選択し、一括でエクスポートする事ができます。

個別に選択しているテーブルをキーボードの「Ctrl」を押しながらテーブル名を選択すると、複数選択でき、任意の複数のテーブルをまとめてエクスポートできます。他の手順は同じですが、ファイル名は重複しないように気を付けてください。

*ファイルの圧縮

最小のテーブル毎のエクスポートでも、残念ながらインポートのファイル制限容量に引っかかってしまった場合、エクスポートしたファイルを圧縮する事でアップロードできる可能性があります。

私の場合、アーカイバの「Explzh」を使って普通にzip圧縮を掛けアップロードすると上手くいきました。

1テーブルだけデータ容量が4MBになってしまい、移転先のファイル容量制限の2MBを越えてしまいました。phpMyAdminのファイルアップロードでのインポートでは、圧縮ファイルにも対応しているみたいなので、phpMyAdminにて指定されている圧縮形式の1つであるzip形式で圧縮を掛け、ファイル容量を500KBまで落としてからアップロードすると正常にインポートされました。

*インポート(データベース丸ごとエクスポートした場合)

移転先のサーバのデータベースにデータをインポートする場合、ログイン後の画面の右サイドにて「インポート」のリンクがあるのでクリックします。

インポート画面にて「ファイルをインポートする」項目の「テキストファイルの場所」の「参照」ボタンをクリックし、ファイル選択ダイアログが出てくるので、エクスポートしたデータを選択します。「実行」ボタンを押します。「インポートに成功しました。」とのメッセージが出れば成功です。

*インポート(テーブル毎にエクスポート or 複数のテーブルをまとめてエクスポートした場合)

テーブル毎にエクスポート、または複数のテーブルをまとめてエクスポートした場合は、phpMyAdminのログイン後の画面で左サイドのデータベース名をクリックします。

テーブル一覧の画面で(何もデータがなければテーブルも表示されない)「インポート」のリンクをクリックします。インポート画面にて「ファイルをインポートする」項目の「テキストファイルの場所」の「参照」ボタンをクリックし、ファイル選択ダイアログが出てくるので、エクスポートしたデータを選択します。「実行」ボタンを押します。「インポートに成功しました。x個の照会を実行しました。」とのメッセージが出れば成功です。エクスポートしたデータの数だけ同じ作業を繰り返してください。

*Movable Typeでの微調整

Movable Typeのインストールが完了している事を前提とし、ここでデータベースのデータの移行が正常に行われていれば、ログインユーザ登録をしていなくてもログイン画面が出てきます。このログイン画面では、移転前のユーザ名とパスワードでログインする事ができます。

ログイン後、一番にしなければならない事は、「設定」の「公開」画面にてサイトパスを移転後のサーバに合わせて変更する事です。

そのままだと移転前のサーバのパスとなってしまうので、移転後のサーバに合わせます。ドメインやサイトURLも変わっていれば、それも新しい設定に合わせ、「アーカイブ設定」もしていれば同様に新しいサーバに合わせます。以上で移転前と同様にMovable Typeを使う事ができます。これは同じ方法を用いれば、Movable Typeに限った事ではありません。

*補足:同じドメインを利用し続け、URLを変更せずにサーバのみ移転する場合の注意点

同じドメインを利用し、URLを変更せずにサーバのみ移転する場合はDNSの問題が発生します。

ドメインでDNSの変更をする前に、エクスポート作業を済ましておき、Movable Typeのシステム部分である動的ファイルの削除をし、静的ファイル(アーカイブ)を一度ローカルにダウンロードしておき、移転後のサーバに静的ファイルをアップロードしておきます。また移転後のサーバにアクセス可能であれば、Movable Typeのインストールとデータベースの移行をし、コメントやトラックバックを処理するスクリプトは削除しておく事など事前に済ませておくと良いでしょう。

DNSの浸透具合によっては、遅い場合はDNS設定変更後から1週間程移転前のサーバに繋がる事があります。データベースの整合性を取るために、移転前のサーバに繋がる場合は、エントリーの投稿を控えた方がよいでしょう。移転後のサーバに繋がるようになってからエントリーの投稿を再開しましょう。

また、静的ファイルを事前に移転後のサーバにアップロードしておけば、閲覧者が新旧どちらのサーバにアクセスしても記事は同じように表示されます。コメント、トラックバック処理のスクリプトに関しては、完全にDNSが浸透した頃にアップロードする事をお勧めします。

ドメインはそのままでサーバだけ移転すると、自分が移転先のサーバにアクセスできても、他の人が移転前のサーバに繋がっている事はよくある事です。DNSが完全に浸透する前に他の人が移転前のサーバに設置されているMovableTypeにコメントを残しても、移転先のサーバにはコメントが残らず、データベースの整合性も取れません。

そういう意味では何を以て完全な移行と言えるのかは私には分かりません。

はぁ...いつもの事ながらこれだけ書くと、ウチの大学の卒業研究の一項目に匹敵するよなぁ...。

そしてアルコールの勢い恐るべし!w(マテ

時間があったらスクリーンショットを追加します。

Comments:2

mkbl 2007年3月31日 17:22

参考にさせていただきました。ありがとうございました。

リンクさせていただきましたのでご報告申し上げます。トラックバックも送らせていただきました。

http://note.wbmstr.info/archives/53542027.html

もぐもぐ 2007年5月10日 21:33

phpMyadminを使用しているものです。
オーバーヘッドのこと、知りませんでした。
2テーブルありました。
それだけでも、レスポンスが良くなったような感じです。

ところで、phpMyadminのタイムアウトが早くて困っています。タイムアウト時の数値を、今忘れていまいましたが、、確か18800というような・・・

mysqladminフォルダ下には、.htaccessでsession時間を長くしているのですが、できていないようです。

どんなところを注意していけばよろしいでしょうか?

ちなみに、他のフォルダは.htaccessでちゃんとsession時間を長くできているのです。

Comment Form

Trackbacks:1

TrackBack URL for this entry
http://weblog.sena.jp/mt/mt-tb.cgi/576
Listed below are links to weblogs that reference
phpMyAdminでのサーバ間データ移行 from Heartless -Sena-
UTF-8仕様XOOPSサイトお引越し:XREA⇒エックスサーバ編1:MySQLデータのエクスポートとインポート with PhpMyAdmin from インターネット*ノート 2007-03-31 (土) 17:15
UTF-8仕様のXOOPSで構築しているサイトをXREAからエックスサーバへ移転しました。備忘録としてメモしておきます。

Home > Movable Type > phpMyAdminでのサーバ間データ移行

Search
Feeds

Return to page top