RockyLinux9.3で自宅サーバーを再構築V07・WordPress のバックアップとリストア

Linux (CentOS、RockyLinux)

ここまでで、新しい環境「RocyLinux9.3」でWordPressが動作できました。
今回の目的は、旧サーバー「centOS7」環境を「RocyLinux9.3」へ移行する事です。
まずは「centOS7」のWordPressデータのバックアップを取り、そのデータを
「RocyLinux9.3」へリストアする方法を説明します。

WordPressバックアップ

バックアップは、データベースとデータファイルを行います。
データベースは、MariaDBが管理保存しています
投稿記事や設定などが保存されています。
データファイルは、WordPress ディレクトリの、「wp-content」内のデータで
主に、テーマやプラグイン、画像データなどが保存されているデータです。

データベース・MariaDBのバックアップ

データベースは、「mysqldump」でバックアップします。
データベース値は前回の例を参考にします。

・管理者パスワード: hogehoge_passwd
・データベース名:WpDb
・ユーザー名:WpAdmin
・パスワード:WpPasswd
・データベースホスト:localhost

前回例を参考にすると、コマンドのパラメータは、下記になります。

-u ユーザー名:WpAdmin
-p ユーザーパスワード:WpPasswd
-h ホスト名:localhost
-A すべてのデータベースの意味

バックアップファイル名:WordPress.bak

「mysqldump」が吐き出したデータを出力リダイレクト「>」でファイルに保存します

データベース・MariaDBのリストア

バックアップは、「mysqldump」で行いましたが、リストアは「mysql」でできます。

-u ユーザー名:root
-p 管理者パスワード:hogehoge_passwd
-データベース名:WpDb

バックアップファイル名:WordPress.bak

これで、データベースのリストアは完了ですが、もしバックアップ元とバックアップ先の
URLなどの設定を違えたい場合には、ここを参考にして、内容を書き換えます。

データファイル・wp-content のバックアップ

WordPressをインストール後、投稿により追加変更される
重要なディレクトリが「wp-content」です。
したがって、定期的に「wp-content」をバックアップしておくと、上記のデータベース復元
と共に「wp-content」ディレクトリを書き換える事で、バックアップ時の状態へ戻す事ができます。
日々の更新により「wp-content」内の全てが更新されていく訳ではありませんが
作業の単純化のために、「wp-content」全てをバックアップする事にします。
バックアップ作業は簡単です、適当なバックアップ保存用のディレクトリを用意し
「 [WordPressディレクトリ]/wp-content」を圧縮し、保存用ディレクトリに保存しておきます。
バックアップしたファイル名には、日付を付けておくと、バックアップ時期がわかりやすいです。
筆者は、下記のような設定で運用します。

バックアップ保存ディレクトリ:/home/hogehoge/BackupDir/
バックアップ保存ファイル名:20240103-Wp-content.tar.gz
バックアップ元ディレクトリ:/home/www/html/blog/wp-content/

データファイル・wp-content のリストア

データファイルの復元は上記のデータベースの復元と共に行う事が重要です。
基本的には、バックアップされているディレクトリと入れ換えるだけですが
いきなり入れ替えでは戻せなくなるので、まずは既存を名前変更で残しておきます。
・圧縮保存されている、バックアップファイルを展開
・既存の、「WordPressディレクトリ」/wp-content/ を「wp-content_bak」などに変更
・展開された「バックアップディレクトリ」内の「wp-content」を
「WordPressディレクトリ」に移動。
・移動された「wp-content」の属性を「apacheユーザー」属性にすべて変更
この作業で、サイトへアクセスすると、バックアップ時の状態になっています。

WordPress 自動バックアップ

WordPress には、バックアップのプラグインもありますが、自宅サーバーなど
シェルが利用できる環境であれば、シェルスクリプトを組む事で自動バックアップが可能になります。

バックアップさせるシェルスクリプトを作成します。
シェルスクリプトの構文や文法は、ネット上に情報がありますのでそちらで確認してください。
まずは、シェルシェルスクリプトを置くディレクトリを作成します。
筆者は、「管理ユーザーのホームディレクト」/bin/ としました。
さらに、バックアップを置くディレクトリも作成します。
「ホームディレクト」/Backup/を作成し、「Backup」の下に「MariaDB」と「Wp-content」を作成し、この中に保存しようと思います。
バックアップ用のディレクトリは、事前に作成しておきます。

/home/hogehoge
├─Backup
│  ├─MariaDB       <--- データベース用
│  └─Wp-content    <--- データファイル用
├─bin         <---- 自動バックアップスクリプト
├─Desktop
├─Documents
├─Downloads
├─Music
├─Pictures
├─Public
├─Templates
└─Videos

MariaDBのバックアップスクリプト

スクリプト内では次の変数を定義します。
変数は、自分の環境に合わせて編集します。

BackupDir=”/home/hogehoge/Backup/MariaDB” #バックアップ用ディレクトリ
MysqlUser=”WpAdmin” #ユーザー名
MysqlUserPasswd=”WpPasswd” #ユーザーパスワード
LOG=”mariadb_backup.log” #バックアップログファイル

バックアップファイル名は、日付+”-MariaDB.bak” を自動設定する仕様にします。

このファイルを、適当なファイル名で、スクリプト用ディレクトリへ保存します。
筆者は「/home/hogehoge/bin/」に「MariaDB_Backup.sh」で保存しました。
このファイルは、実行できるように、実行権限を付けます

wp-content のバックアップスクリプト

wp-contentディレクトリは、「home/hogehoge/Backup/Wp-content/に保存します。
こちらの変数も、自分の環境に合わせます。

BackupDir=”/home/hogehoge/Backup/Wp-content” #バックアップ用ディレクトリ
BackupSorceDir=”/home/www/html/blog/wp-content” #バックアップ元
LOG=”wp-content_backup.log” #バックアップログファイル

バックアップディレクトリは圧縮しファイル名は、
日付+”-Wp-content.tar.gz” を自動設定する仕様にします。

このファイルも同様に「Wp-ContentBackup.sh」で保存しました。
このファイルにも、実行できるように、実行権限を付けます

自動バックアップ

ここでの例では、/home/hogehoge/bin ディレクトリ内にスクリプトを作成しました
まずは、正常に動作するか、確認してみます。

スクリプトの正常動作が確認できたら、自動バックアップするようにスケジューリングします
スケジューリングは、「crontab」コマンドで行います。
「crontab」は、実行時間を、「分」「時」「日」「月」「曜日」で設定し、
実行したいコマンドを書きます。
例えば、朝6:30に「MariaDB.sh」を実行したい場合には、下記になります。

30 06 * * * /home/hogehoge/bin MariaDB.sh

定義済みのスケジュールは「crontab -l」で確認でます。
定義されていない場合には、なにもでてきません。
定義するには、「crontab -e」で行います。
例として、AM3:00に「MariaDB_Backup.sh」、AM3:30に「Wp-Content_Backup.sh」
をスケジュールしてみます。

これで、毎日WordPressの自動バックアップができます。

リストア、スクリプト

リストア用のスクリプトはとちょっと面倒です。
いきなり、リストアしてしまったら、「あ~」直前に戻したいぃ・・・
になるかもしれません。
やはり、仕様としてはリストア直前にバックを取ってから実行したほうが安全です。
既存のバックアップ仕様の組込など考えると、結構面倒ですしリストア自体は、
バックアップのように定期的にやるものではないので、手動でやったほうが安全かもしれません。
ある程度、バックアップファイルの実績がとれたら、リストアスクリプトも作成しようと思います。

復元の確認

データベース・MariaDBのリストアデータファイル・wp-content のリストア
今回は上記の方法で、手動で復元してみます。
手動復元が完了したら、ページを表示して確認してみましょう。
トップページは正常に表示されています。
管理画面での設定も、バックアップ前と同じになっています。
ところが・・・・・

記事のリンクへ飛べない!

記事をクリックしても、そのリンクが「Not Founf」で開きません。

パーマリンク

調べてみると、「パーマリンク」が怪しいです。

https://haniwaman.com/permalink-not-reflected/#index_id3
https://irohaplat.com/wordpress-httpd-conf-setting-for-permanentlink/

「基本」にしてみると、正常にリンクできるようになりました。
ところが、いままでの設定の「投稿名」にすると、リンクエラーになります。

.htaccess

WordPressのパーマリンクは、「変更を保存」ボタンを押す事で、サーバーの
「WordPress」ディレクトリへ「.htaccess」を作成し、リンク内容を書き込むようです。
確かに、「変更を保存」実行前までは、「WordPress」ディレクトリで「ls -la」しても、「.htaccess」は存在していませんでしたが「変更を保存」する事で、自動作成されました。
ところが、これでも、リンクエラーは解消しません。

mod_rewriteモジュール

mod_rewrite.so」モジュールが組み込まれているかを確認します。

モジュールは読み込まれています。

Apacheの、AllowOverrideの設定

Apacheの設定ファイル、「httpd.conf」を確認してみます。

デフォルトでは「 AllowOverride None」になっていました。
この設定を「All」にしたほうがよさそうですが、筆者の「WordPress」のディレクトリは
「/home/www/html/blog」なので、「/home/www/html/」ではなくて
「/home/www/html/blog」「AllowOverride All」設定にします。
追加の設定は、直接「httpd.conf」に追加する方法と、「/etc/httpd/conf.d」のディレクトリ内に
「 [WordPress用].conf 」のファイルを追加する方法があります。
「confファイル」追加の有効性は、「httpd.conf」の「IncludeOptional」で確認できます。

この設定であれば、直接「httpd.conf」を編集しなくても、
後者の「/etc/httpd/conf.d」に「wordpress.conf」を追加する方法が可能です。

この設定で、正常にリンク先にアクセスできるようになりました。
これで、バックアップは定期的に自動作成されているので、
もしトラブルなどあった場合には、以前の状態に復元する事ができますし
今回の記事のテーマの、サーバー本体の引っ越しにも、使用できます。

RockyLinux9.3で自宅サーバーを再構築・記事一覧

コメント

タイトルとURLをコピーしました