WodPressでBlogを運用していくうえで、Blog公開前のテストやWordPress本体のバージョンアップ確認などでバックアップ環境(検証環境)は是非とも用意しておきたいものです。Docker-Compose環境であれば簡単にバックアップファイルからWordPressコンテンツをリストアすることができます。前回記事(Docker-ComposeにWordPressをインストール)をベースにWordPress検証環境をDocker上に構築する手順を紹介します。
前提
①バックアップ対象はCentOS7のWordPress上に構築したBlogコンテンツ。
②リストア先は、CentOS7.3上のDocker環境。Docker-Composeが使用できればCentOs7.3以外の環境でもOK。
③WordPressのバックアップとリストアは手動で実施します。プラグインによるバックアップリストアの方法もありますが、環境により動作しないこともありますので動作が確実なマニュアルでの手順を今回採用しています。
目次
1.Blogコンテンツファイルのバックアップ
(1)コンテンツ
WordPressコンテンツルートフォルダ直下にある「wp-content」フォルダ一式をFTPソフトなどでローカル環境にコピーします。
(2)設定ファイル
WordPressコンテンツルートフォルダ直下にある「wp-config.php」ファイルをFTPソフトなどでローカル環境にコピーします。
2.Blog記事(DBデータ)のバックアップ
記事本文の存在するDBをバックアップします。phpmyadminを使用する手順と使用せずにターミナルからSQLコマンドを実行する手順のそれぞれを説明します。
(1)phpmyadminを使用する手順
①phpmyadminにログインし対象のDBへ移動、「エクスポート」タブを選択します。詳細設定を選択します。
②IF EXIST DROP DATABASEを追加にチェックします。
③実行してダウンロードファイルを保存します。
(2)SQLコマンドでの手順
sshでmariadB(mysql)サーバに接続しターミナルから以下のコマンドを発行します。
1 2 3 4 |
# mysqldump -u 「DBユーザー名」 -p 「データベース名」 > 「バックアップ先ファイルパス」 ↓ # mysqldump -u user_hoge -p wp_dbwordpress > backup.sql Enter password:XXXXXXXX |
「データベース名」には目的のDB名(wp_dbwordpress)を指定します。DBユーザー名は「wp_dbwordpress」にアクセス可能なユーザー名(user_hoge)を指定します。実行するとパスワードの入力を要求されますので、「user_hoge」のパスワード(XXXXXXXX)を入力します。以上の手順でbackup.sqlにBlog情報がバックアップされます。
3.WordPressリストア環境準備
リストア先は、Docker-Composeで構築したDockerコンテナ環境です。DockerにWordpressを構築した環境をベースに使用します。冒頭でも紹介しましたが(Docker-ComposeにWordPressをインストール)がベースとなります。まだご覧になっていない方は事前に目を通しておいてください。
(1)フォルダ構成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/home/docker/test/phpsql phpsql │ docker-compose.yml ├─data │ │ │ ├─mysql │ │ │ └─www │ ├─phpmyadmin │ ├─wordpress │ └─blog │ ├─nginx │ Dockerfile │ server.conf │ └─php7 Dockerfile php.ini |
WebコンテンツフォルダのWWWの下に今回リストア先となる「blog」を作成していきます。
(2)WordPress初期ファイルの展開
バックアップしたWordPressと同じバージョンWordPressアーカイブファイルをこちらからダウンロードします。ダウンロード後、ファイルを展開し上記www下のblogに展開します。カレントディレクトリは「/home/docker/test/phpsql」
1 2 3 |
# wget https://ja.wordpress.org/latest-ja.tar.gz # tar xf latest-ja.tar.gz # mv wordpress data/www/blog |
(3)DBの作成
バックアップしたDBのSQLファイルを展開するデータベースとログイン用ユーザーを作成します。DB名やユーザー名・パスワードは任意の値で設定できますが、保守性を考慮して稼働中の環境に合わせておきましょう。phpmyadminからrootでログインをしSQLタブから以下のスクリプト(例)を張り付けてSQLを実行します。
1 2 |
create database wp_dbwordpress default character set utf8; grant ALL PRIVILEGES on wp_dbwordpress.* to user_hoge@'%'identified by 'XXXXXXXXX'; |
DB名:wp_dbwordpress
ユーザ名:user_hoge
パスワード:XXXXXXXX
4.リストア処理
(1)コンテンツファイル
バックアップしたwp-contentフォルダ一式を展開先のwww/blog/にFTPソフトなどでアップロードします。元々あるwp-contentに対してファイルを上書きします。
1 2 3 4 5 |
└─www ├─phpmyadmin ├─wordpress └─blog └─wp-content ←ここにアップロード |
(2)設定ファイル
バックアップした「wp-config.php」をblog直下にFTPソフト等でアップロードします。アップロード後、この記事を参考にDB_HOST名を変更します。
1 2 3 |
# vi data/www/blog/wp-config.php /** MySQL のホスト名 */ define('DB_HOST', 'phpsql_db_1'); ← localhostからコンテナ名に変更 |
上記設定を終えたらBlogフォルダのアクセス権を変更しておきます。
(テスト環境用としての設定です。この権限で公開はお勧めできません)
1 |
# chmod -R 777 data/www/blog |
(3)データベース
phpmyadminに作成したユーザー(user_hoge)でログインします。インポートタグからバックアップしたSQLファイル(backup.sql)を指定し実行します。
phpmyadmin phpのデフォルトでは2048KBまでのSQLファイルしか実行できません。SQLファイルサイズが2048KBを超えている場合は、php7ディレクトリ下のphp.iniに以下の設定を追加します。
1 2 3 4 5 |
# vi php7/php.ini ↓以下の3行を追加 memory_limit = 32M post_max_size = 32M upload_max_filesize = 32M |
上記SQLのインポート処理に成功したら、次はコンテンツURL変更用SQLを実行します。リストア先でURLを変更しない場合には、当作業は不要です。リストア先で元のURLと異なるURLで運用する場合のみ(通常はこちら)以下の作業を実施します。
phpmyadminのSQLタブからSQLを実行しますが実行する前に環境に合わせてSQL文を変更します。(※2017/6/8 SQLに不足がありましたので追加・修正しました)
NO | 変更対象 | 概要 | 詳細 |
---|---|---|---|
1 | wp_ | テーブル接頭辞 | wp-config.php内の設定値$table_prefix に設定した値に合わせます(通常はそのままでOK) |
2 | http://exampleold.com/ | 変更前URL | バックアップ元で使用していたWordpressのURLを指定します |
3 | http://examplenew.com/ | 変更後URL | リストア先で使用するWordpressのURLを指定します |
1 2 3 4 5 6 7 8 |
##UPDATE wp_options SET option_value = replace(option_value, 'http://exampleold.com/', 'http://examplenew.com/') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_options SET option_value = replace(option_value, 'http://exampleold.com/', 'http://examplenew.com/'); UPDATE wp_posts SET guid = replace(guid, 'http://exampleold.com/', 'http://examplenew.com/'); UPDATE wp_posts SET post_content = replace(post_content, 'http://exampleold.com/', 'http://examplenew.com/'); UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://exampleold.com/', 'http://examplenew.com/'); UPDATE wp_blc_instances SET raw_url = replace(raw_url,'http://exampleold.com/', 'http://examplenew.com/'); UPDATE wp_blc_instances SET link_text = replace(link_text,'http://exampleold.com/', 'http://examplenew.com/'); UPDATE wp_blc_links SET url = replace(url,'http://exampleold.com/', 'http://examplenew.com/'); |
これでDocker環境へのWordPressコンテンツ移行作業は完了です。お疲れ様でした。
5.参考にさせて頂いたサイト
プラグインを頼らずWordPressのサーバー移行。新ドメインでも大丈夫
ありがとうございます。
1 |