KubernetesへデプロイしたWordPressへのデータリストア覚書

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を運用できるように、引き続き技能を磨こうと思います。

バックアップどうしましょうね。

スポンサーリンク

フォローする

スポンサーリンク