CPIからのサーバデータ移設

CPIからサーバデータを移設するうえで、クラウドサーバと違う大きな特徴は SSH接続でコマンド実行できない ことでしょう。※SSH接続に対応しているプランもあります。
SSH接続できないレンタルプランの場合、以下のような制約が発生します。

  • ファイルを移行するのにFTPでしか接続できない
  • DBデータへのアクセスはphpMyAdminに限られる

WordPressのサーバデータ移設時に必要な、ファイルデータとDBデータの移行の方法と注意点について記述します。

ファイルデータ

SSH接続ができないレンタルプランでも、FTPによる接続が許可されています。
移行先がクラウドサーバーの場合、移行方法として lftp コマンド を使うことができます。

WordPressのファイルデータの移行をするためには、レンタルサーバ上のドキュメントルートを移行先のドキュメントルートと同期すれば良いです。
例えばCPIのGシリーズ,2007シリーズ、Xシリーズの場合、httpのドキュメントルートは /http、httpsのドキュメントルートは /secure です。移行元のレンタルサーバのドキュメントルートを確認しておきましょう。

では、lftp による移行の方法を以下にご紹介します。

lftp による移行方法

インタラクティブモードの場合

移行先のサーバから、インタラクティブモードでlftpを起動して移行元に接続します。

$ lftp
lftp :~> open username@***.***.***.***
Password:

隠しファイルも含めて同期するように設定

:~> set ftp:list-options -a

例えば移行元のドキュメントルートが/html、移行先のドキュメントルートが/var/www/htmlの場合は以下のように実行します。

:/html> mirror -a -n /html/ /var/www/html/

mirror に-aのオプションを付けると、owner, group, パーミッション を保存したまま同期します( –allow-chown –allow-suid –no-umask と同じ)。

-n(–only-newer) は新しいファイル・ディレクトリだけを対象に同期するオプションです。
初めて実行する際は不要ですが、再実行する際に新しいものだけを持っていくことができます。
なお(CPIに限った話ではありませんが)、移行先で wp_config.php を更新している場合、同期を再実行する際に wp_config.php を上書きしてしまわないように 注意してください。
-n オプションはその防止策にもなりますが、移行先のwp_config.phpの方が新しい場合にしか有効でないので、必要に応じて退避するか、-x(--exclude) オプションで明示的に除外を指定しておいてもよいでしょう。

一気に実行する場合

以下のコマンドで、上記のインタラクティブモードで行ったことを一気に実行することができます。

$ lftp -u username,password ***.***.***.*** -e 'set ftp:list-options -a; mirror -a -n /html/ /var/www/html/'

所有者の変更

CPI側の所有者がftpになっていることがあるので、ownerとgroupを移行先の環境に合わせて変更します。ドキュメントルートが/var/www/htmlの場合は以下のように実行します。

$ sudo chown -R apache.apache /var/www/html/

DBデータ

CPIの共用レンタルサーバ上のDBデータにアクセスするには、ウェブのコントロールパネルからphpMyAdminを起動します。

CPIは複数のMySQLバージョンに対応していることがありますが、それぞれに複数のDBが設置可能です。移行対象のデータベースを確認しておきましょう。
例えばあるプランではMySQL4.0と5.0に対応しており、管理画面を開くとそれぞれ別のphpMyAdminが表示されます。

エクスポート

phpMyAdminを開いたら、WordPressのデータベースを開いてテーブルをエクスポートをします。(データベースのエクスポートでもOK。)

エクスポートする時は、サイトデータの大きさによって 全データエクスポートされないことがある ので、注意してください。(CPIの注意点というよりphpMyAdminの注意点ですが…)
エクスポートに失敗したとエラーメッセージが出る場合はまだいいのですが、エラーメッセージが出ないこともあるので、全件が移行できたかどうか必ず確認する必要があります。

確認方法は、

  1. 出力されたSQLが全テーブル分出力されているか確認する
  2. レコード数を控えておいて移行先の件数と比較する

などが考えられます。

全件エクスポートできていない場合の対応策としては、

  1. 圧縮形式を変えてみる
  2. テーブル毎に小分けにしてエクスポートする

など、工夫してみてください。
ちなみに、私は「gzip形式」でエクスポートした時はテーブル4つ分しか出力できなかったのですが、「bzip形式」にしてみたところ全件無事に出力することができました。

インポート

次は、ローカルにダウンロードされたDBデータを移行先でインポートします。
移行先にphpMyAdminがインストールされている場合は、もちろんphpMyAdminでインポートすることも可能ですが、ファイルサイズによってはうまくインポートされない場合もあるので、直接サーバにファイルを送ってmysqlコマンドで取り込んだ方が無難かもしれません。
phpMyAdminでエクスポートしたデータは、MySQLでエクスポートしたデータと同じように取り込むことができます。

ローカルPC(Windows)からLinuxサーバにファイルを転送する方法は、例えばTeraTermを使って、こんな感じで送れます。↓
参考:TeraTermで効率良くファイル転送

行先サーバのDBを準備

WordPress用のデータベースとユーザー作成します。移行元と同じにする場合は、あらかじめ移行元のwp_config.phpファイルなどで確認しておきましょう。

$ mysql -u root -p
Enter password: 

mysql> create database wp_db;
Query OK, 1 row affected (0.04 sec)

mysql> grant all privileges on wp_db.* to wp_user@localhost identified by 'wp_password';
Query OK, 0 rows affected (0.06 sec)
転送したデータをインポート
$ mysql -u root -p wp_db < ??????.sql
wp_config.phpを修正

上記で設定したWordPress用のデータベース・ユーザー、パスワードなどが移行元と異なる場合は変更します。
また、移行元のCPIサーバは 代替ポート番号が指定されている 事が多いため、移行先のMySQL のポート番号に合わせてDB_HOST 値を変更します。
デフォルトの3306 番ポートを使う場合は、DB_HOST 値の :3307などと指定されている部分を:3306とするか、削除すれば大丈夫です。

/** WordPress のためのデータベース名 */
define('DB_NAME', 'wp_db');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'wp_user');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'wp_password');

/** MySQL のホスト名 */
define('DB_HOST', '127.0.0.1');