実環境にあるWordPressをローカル開発環境に移設するよ!

よくやるのでまとめます。
実環境はrootとれるクラウドにあるのであまり参考にならないかも。

更新履歴

2019-03-07 mod_rewriteの設定方法へのリンクを追加

本番サーバーのバックアップ

WPのファイルを全部コピー

FTPで本番サーバーに接続して、
WPの全部のデータをコピーする(すごく重いですが画像ファイルも全部コピーします)

DBのバックアップ

phpmyadminとかあればエクスポートでDBのバックアップができます。
でも今使ってるサーバーにはインストールしてなかったのでSSHでmysqlに接続してDBのバックアップ(ダンプ)をします。
※■ではさまれている箇所は■ごと自分の環境に合わせて変更してください

mysqlにログイン

mysql -u ■ユーザー名■ -p

show databasesでDB一覧を一応確認します。
本番のwp-config.phpに記載されているdb名があればOK
今回はwordpressにワードプレスのデータが入っていました。
(今回rootで表示したので余計なテーブルも結構出ています)

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+

確認したらログアウト

>exit

バックアップします。
これはメモリに保存してからダンプファイルを作るオプション付きのコマンドです。

mysqldump -u ■DBユーザー名■ -p ■バックアップするテーブル名■ --single-transaction > ■ダンプするディレクトリとファイル■

いつもはこういう書き方でダンプしています。
mysqldump -u db_user -p wordpress –single-transaction > /var/tmp/wordpress_2018-05-29.log
権限次第ではファイルが作れなかったりするので、あまり権限(パーミッション)を気にしなくていいtmpとかに吐き出してます。
ファイル名はDB名+日付にしておけば一応かぶらないだろうという打算でつけています。

FTPでこのディレクトリまで行くとログができているので、
このダンプしたファイルをFTPでダウンロードします。

バックアップしたデータを復元する(リストア)

ファイルをコピーする

本番からコピーしたwpのファイルをローカル環境のウェブルートフォルダに入れます。
apacheインストール直後だと
/var/www/html
下がウェブルートフォルダになっていると思うので全部コピーします。

このままだとオーナー権限などがFTPユーザーの権限のままなので変更します。
sshでログインして以下グループ権限とオーナー権限をapacheに変更します。

chown apache:apache -R /var/www/html/

あとwp-config.phpをテキストエディタで開いて下記をローカル開発環境のDBで使用する適切な値に変更して保存しましょう。
DB_HOSTの箇所は同じサーバーにmysqlをインストールするならlocalhostのままでいいはずです。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', '■DB名■');

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

/** MySQL データベースのパスワード */
define('DB_PASSWORD', '■DBのユーザーのパスワード■');

/** MySQL のホスト名 */
define('DB_HOST', '■ホスト名、localhostとか■');

この状態だとDBのデータが入っていません。
この状態でwpにアクセスすると下記みたいなエラーが出ます
Error establishing a database connection

なのでDBにデータを入れます

DBにデータを入れる(リストア)

一応ローカル側のDBに何が入っているか確認します

mysqlにログイン

mysql -u ■ユーザー名■ -p

show databasesでDB一覧を一応確認します。

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.02 sec)

データを入れる先のデータベースを作成します。

CREATE DATABASE ■リストアするテーブル名■;
Query OK, 1 row affected (0.00 sec)

データベース名を変更すると(様々な理由で、DB名もsqlに含めちゃったとか)リストアできなかったりするのでデータベース名は今回同じにしようと思います。
CREATE DATABASE wordpress;
wp-configのDB_NAMEと作ったDB名を揃えないとつながらないので注意しましょう。

確認したらmysqlからログアウトします

>exit

ログアウトしたら先程バックアップしたデータをインポートします。
バックアップしたデータをFTPでローカルにコピーします。
権限で面倒なので
/var/tmp
に入れてしまってもいいですが、うっかり本番とローカル間違えて上書きしたりしないように気をつけてください

下記を実行するとDBにデータをリストアできます

mysql -u ■DBユーザー名■ -p -D ■リストアするテーブル名■ < ■リストアするディレクトリとファイル■

実際にはこういう形で打つことになると思います
mysql -u db_user -p -D wordpress < /var/tmp/wordpress_2018-05-29.log

DB内のドメインを変更する

ここまで作業するとローカル開発環境のIP叩くとWPが表示されるはずです。

でもリンクをクリックすると元サイトに飛んでしまうので、DB内のデータを書き換えましょう。
wpはDB内部にドメイン名を保存するのでこれをやらないとまともに表示されません。

置換には「Search Replace DB」を使います(英語)
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

注意事項を読んでチェックしてメールアドレスを入力し[send]を押すとメールが届きます。
届いたメールに
「Download Search Replace DB v 3.1.0 here. 」みたいなリンクがあるのでクリックすると「Search-Replace-DB-3-1-0-emaildownloads.zip」ファイルがダウンロードされます。
解凍したデータを「Search-Replace-DB-master」みたいなフォルダにいれて
wpと同じ階層にアップロードしてブラウザからアクセスします。

下記のようなページが出るのでDBを置換します。
元のドメイン、移転先のIPを入力してlinve runをクリックします
ちなみに
https://www.example.com みたいなssl付きのドメインをhttp://192.168.33.10 にする場合下記のように置換したほうがいいです。
www.example.com→192.168.33.10
example.com→192.168.33.10
https://192.168.33.10→http://192.168.33.10

終わったら一応「Search-Replace-DB-master」フォルダごと削除しましょう。
(delete meでもいけるのかもしれませんが権限次第では失敗するみたい?)

これでwpにアクセスしても正常に表示されるはずです。
(もし正常に表示されない場合はサーバーのmod_rewrite設定を見直してみましょう)
.htaceesの設定も役に立つかもしれません)