WordPressの引っ越しの練習

NAS,WordPress

つい先日、WordPressを使ったサーバがクラックされて、大きな被害を受けていましたね。原因は、サーバ運営側の設定ミスだとか…。

私は、ブログ(WordPress)のデータが無くなってしまうのは怖いので、バックアップと引っ越しの際の練習も兼ねて、実際に試してみました。実際にこのサイトを他の所へ引っ越す訳ではないです。

引っ越し元(サーバ博士)から、自宅内サーバへの引っ越しをやってみました。

およそ、次の手順となります。引っ越し元と、引っ越し先のURLが違う物とします。また、マルチサイト運営をしている物とします。

引っ越し元: example.com
引っ越し先: example.org

  1. 引っ越し元での作業
    1. phpMyAdminでデータベースバックアップ(A)
    2. tar+gzでwp-contentsバックアップ
    3. .htacccessとwp-config.phpバックアップ
  2. 引っ越し準備作業
    1. (A)のデータ中、URLを書き換える(B)
    2. (B)のデータ中、マルチサイトに関するURLを書き換える(C)
    3. wp-config.phpのユーザ名とデーベース名を書き換える
  3. 引っ越し先での作業
    1. phpMyAdminで、インポート用のユーザとデータベース作成
    2. phpMyAdminで、(C)のデータをインポート
    3. wp-contents, .htaccess, wp-config.phpをリストア

1. 引っ越し元での作業

引っ越し元は、「サーバ博士」です。

1.1 phpMyAdminでデータベースバックアップ(A)

まず、WordPressのデータベースをバックアップします。基本的なバックアップの仕方は、WordPressの公式ページをご覧下さい。

phpMyAdminのバージョンによって、若干違いますが、手順としては同じです。

サーバー博士の場合、PLESK管理画面から、phpMyAdmin (Version 3.4.10.2)を起動してからバックアップします。

ウェブサイトとドメインデータベースで管理画面を開いた後で、データベースを選択します。

WordPressDBを開く

その次に、Webadminを開きます。

Webadminを開く

そうすると、後は、普通のphpMyAdminの画面が現れますので、エキスポートでデータベースを保存します。

phpMyAdmin 1

phpMyAdmin 2

phpMyAdmin 3

最後に実行ボタンを押します。

1.2 tar+gzでwp-contentsバックアップ

これは、サーバー博士に、SSHでログインして作業します。

$ cd /httpdocs
$ tar cvzf wp-contents.tar.gz wp-contents

tarファイルは、scpでコピーして下さい。

WordPressのデータ(テーマ、プラグイン、画像)は、wp-contentsの中に入っています。面倒だったら、/httpdocsのデータを丸ごと持ってきても構わないと思います。そうすれば、次の1.3の作業も同時にできます。]

1.3 .htacccessとwp-config.phpバックアップ

これらのファイルを、scpでコピーします。

2. 引っ越し準備作業

MySQLのデータをコピーして来ただけではダメで、SQL文内のURLの書き換え等が必要になります。

2.1 (A)のデータ中、URLを書き換える(B)

% gzip -dc wpdb.sql.gz | sed 's/http:\/\/example.com/http:\/\/example.org/g' > wpdb-rewrite.sql

2.2 (B)のデータ中、マルチサイトに関するURLを書き換える(C)

マルチサイトで運用している時、次の作業が必要となります。この作業をしないと、ログインID等の設定があっていても「データベース接続確立エラー」が出ます。

かなりハマりました。

上記の、wpdb-rewrite.sqlをエディタで開いて、"_blogs"を探します。この部分に、マルチサイトで使っているドメイン名が、直に書かれています。

--
-- テーブルのデータをダンプしています `wp_top_blogs`
--

INSERT INTO `wp_top_blogs` (`blog_id`, `site_id`, `domain`, `path`, `registered`, `last_updated`, `public`, `archived`, `mature`, `spam`, `deleted`, `lang_id`) VALUES
(1, 1, 'example.com', '/', '2012-04-10 07:01:56', '2013-07-13 16:29:31', 1, '0', 0, 0, 0, 0),
(2, 1, 'example.com', '/plus/', '2012-04-10 07:09:58', '2013-09-02 13:55:52', 1, '0', 0, 0, 0, 0),
(3, 1, 'example.com', '/life/', '2012-04-10 07:10:10', '2013-07-09 14:16:19', 1, '0', 0, 0, 0, 0),
(4, 1, 'example.com', '/tech/', '2012-04-10 07:10:27', '2013-08-17 21:51:06', 1, '0', 0, 0, 0, 0),
(5, 1, 'example.com', '/sadamasashi/', '2012-04-10 07:10:38', '2013-02-12 14:03:41', 1, '0', 0, 0, 0, 0),
(6, 1, 'example.com', '/manakana/', '2012-04-10 07:10:50', '2013-03-24 11:23:34', 1, '0', 0, 0, 0, 0),
(7, 1, 'example.com', '/nendol/', '2013-02-11 12:49:25', '2013-07-06 15:04:54', 1, '0', 0, 0, 0, 0);

この部分の、"example.com"を"example.org"に書き換えます。書き換えたデータを、gzipで圧縮し、この"wpdb-rewrite.sql.gz"を(C)と呼ぶ事にします。

% vi wpdb-rewrite.sql
% gzip wpdb-rewrite.sql

次のウェブページで、解決策がわかりました。ありがとうございます。

2.3 wp-config.phpのユーザ名とデーベース名を書き換える

WordPressを設定した事がある人ならわかりますよね? wp-config.php内の、DB_NAME, DB_USER, DB_PASSWORDを書き換えます。

3. 引っ越し先での作業

いよいよ仕上げです。

3.1 phpMyAdminで、インポート用のユーザとデータベース作成

例えば、次の記事を参考にして下さい。

phpMyAdmin Add User

まるで囲った所に、記入やチェックをします。特権の付け方が、セキュリティ的に正しいかどうかわかりません。個人で使う分には、大丈夫だと思いますが…。

最後に実行ボタンを押します。

データベースは、次の様にして作ります。

phpMyAdmin Make DBphpMyAdmin Make DB

照合順序は「utf8_general_ci」を選びます。

最後に作成ボタンを押します。

3.2 phpMyAdminで、(C)のデータをインポート

3.1で作ったデータベースに、(C)のデータをインポートします。

phpMyAdmin Import

Browse…ボタンを押してファイルを選びます。最後に実行ボタンを押します。

アップロードするファイルの、圧縮した状態でのサイズが、制限を超えていると失敗します。

読み込みに成功すると、「インポートは正常に終了しました。」と出ます。

3.3 wp-contents, .htaccess, wp-config.phpをリストア

1.2, 1.3, 2.3で準備したデータを、引っ越し先の該当箇所に展開します。展開前に、元のデータは名前を変えて、保存しておいた方が良いでしょう。

また、pluginも、最初は全部は動かないかもしれません。制限しながら追加して行った方が良いかもしれません。

この手順により、引っ越し前のウェブサイトと全く同じウェブサイトが再現されて、感動しました。

Posted by お市のかた