WordPressのプラグイン等で、データベースも含めてバックアップ・リストアする手順が、通常の方法だと思います。
元のWindows 10のDockerで動かしていたWordPressがクラッシュしてしましまして。いまはWordPressが動く環境がなく、バックアップは古いダンプしかありません。
新しくRaspberry Pi 4で構築したKubernetesに、WordPressをデプロイしました。こちらにデータをリストアしようと思います。
正式な手順ではない、自分用の覚書のためご注意ください。
目次
KubernetesへデプロイしたWordPressへのデータリストア覚書
クラッシュしたWordPressのバックアップデータを探すところから。
半年ほど前の、mysqldumpと、wp_contentフォルダのバックアップがありました。
うーむ。バックアップをサボったばかりに、半年分のデータは空気になってしまいましたが。
こちらをなんとかKubernetesにデプロイしたWordPressにて復活させたいと思います。
Kubernetesで使用するWordPressはbitnamiさんのイメージ
helmでデプロイしましたが、bitnamiさんのコンテナイメージが使用されているようです。
こちらのイメージが、復元先になるかたちです。
podへバックアップファイルをコピー
kubectl get pod
# sqlバックアップはデータベースのpodへコピー
kubectl cp mysqldump_wp-db.sql wordpress-mariadb-0:/tmp
# htmlコンテンツはhttpdのpodへコピー
kubectl cp volume_wp_web.tar.gz wordpress-wordpress-0:/tmp
kubectlのコピーコマンドで、ポッドの/tmpフォルダにバックアップファイルをコピーしました。
mysqlデータベースのリストア
# mariadb podにて
kubectl exec -it wordpress-mariadb-0 -- bash
mysql -u root -p<続けてパスワード>
CREATE DATABASE wordpress;
mysql -u root -p<続けてパスワード> wordpress < /tmp/mysqldump_wp-db.sql
mariadbポッドでbashを起動、mysqlコマンドでデータベースのコンソールに接続し、空のwordpressデータベースを作成しました。
データベース名は、もとがbitnami_wordpressですが、リストアするデータベースはwordpressという名称にしたかたちです。
アクセス権限の設定等が必要ですが、その前にデータベースのダンプをmysqlコマンドでリストアしました。
wp-contentとwp-config.phpの配備
#httpd podにて
kubectl exec -it wordpress-wordpress-0 -- bash
cd /bitmani/wordpress
# こちらのディレクトリにwp-contentとwp-config.phpを展開
tar zxvf /tmp/volume_wp_web.tar.gz
# wp-config.phpの変更は、kubectl cpコマンドでノードにコピーして編集します
kubectl cp wordpress-wordpress-0:bitnami/wordpress/wp-config.php .
vi wp-config.php
kubectl cp wp-config.php wordpress-wordpress-0:bitnami/wordpress/
# 内部処理でtarを使用する都合から、トップディレクトリの/は不要
helmでデプロイしたWordPressですが、wordpressポッドは/bitnami/wordpressディレクトリが永続化されているようです。消えては困るデータは、こちらのディレクトリに展開しました。
wp-config.phpは、もとのbitnamiさんのwp-config.phpを使わせて頂きます。
下記を変更します。
- データベース名を変更: bitnami_wordpress →リストアしたデータベースへ
- ユーザ名、パスワード等はそのまま
wodpressデータベースの設定調整
GRANTコマンドで、bn_wordpressユーザがリストアしたwordpressデータベースにアクセスできるように、権限を与えておきます。ホスト名は’%’を使用します。(豆
それと、wp_optionsのURLは、kubernetes用にhttp://127.0.0.1に変更しました。
# mariadb podにて
kubectl exec -it skyscrapers-mariadb-0 -- bash
mysql -u root -p<パスワード>
SHOW DATABASES;
--アクセス権限の確認
USE bitnami_wordpress;
SHOW GRANTS;
SHOW GRANTS for 'bn_wordpress'@'%';
USE wordpress;
SHOW GRANTS;
GRANT ALL PRIVILEGES ON wordpress.* TO 'bn_wordpress'@'%' IDENTIFIED BY '<パスワード>';
--テーブルの確認
USE bitnami_wordpress;
SHOW TABLES;
USE wordpress;
SHOW TABLES;
--URLの確認
USE bitnami_wordpress;
select * from wp_options where option_name in('siteurl', 'home', 'fileupload_url');
USE wordpress;
select * from wp_options where option_name in('siteurl', 'home', 'fileupload_url');
--URL更新
update wp_options set option_value='http://127.0.0.1' where option_name in('siteurl', 'home', 'fileupload_url');
select * from wp_options where option_name in('siteurl', 'home', 'fileupload_url');
データベースに関しては、一応、これでトップページとadminページへアクセスは可能になるはずです。
念のため、mysqlコマンドでbn_wordpressユーザで接続して、wordpressデータベースが見られるかどうか確認します。
wp-contentとwp-config.phpの切り替え
#httpd podにて
kubectl exec -it wordpress-wordpress-0 -- bash
cd /bitmani/wordpress
# wp-config.phpを新しいものに切り替え
# wp-contentディレクトリを切り替え
# pluginsディレクトリはリネームしておく
これでデータベースとwp-contentディレクトリが切り替わります。
なにかエラーが出る場合は、pluginsディレクトリをリネームしておきます。
なにか環境変数が足らないと、動きがおかしくなります。wp-config.phpは、bitnamiさんのものをベースにしておいたほうが良いと思います。
わたしの場合ですが、以上でKubernetesにデプロイしたWordPressに、クラッシュしたdockerのWordPressデータをリストアして表示することができました。
データベースのwp_postsテーブルを変更しなければならない場合など、Kubernetes上で行うのはなかなか難しい感じです。
adminページとプラグインが動けば、テーブルの置換プラグイン等を使用して、WordPress上で処理できると思いますので、そのほうが良い感じがします。
クラッシュして半年分のデータが消えましたが、まあそれ以前データは復元できましたので、良しとして。
今度はKubernetesでWordPressを運用できるように、引き続き技能を磨こうと思います。
バックアップどうしましょうね。