ここまでで、新しい環境「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」が吐き出したデータを出力リダイレクト「>」でファイルに保存します
$ mysqldump -u WpAdmin -pWpPasswd -h localhost -A > WordPress.bak
データベース・MariaDBのリストア
バックアップは、「mysqldump」で行いましたが、リストアは「mysql」でできます。
-u ユーザー名:root
-p 管理者パスワード:hogehoge_passwd
-データベース名:WpDb
バックアップファイル名:WordPress.bak
$ mysql -u root -phogehoge_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/
$ tar czf /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ユーザー」属性にすべて変更
この作業で、サイトへアクセスすると、バックアップ時の状態になっています。
$ cd /home/hogehoge/BackupDir/
$ tar xzf ./20240103-Wp-content.tar.gz
$ ls
20240103-Wp-content.tar.gz home
$ sudo mv /home/www/html/blog/wp-content/ /home/www/html/blog/wp-content_bak/
$ sudo mv ./home/www/html/blog/wp-content/ /home/www/html/blog/
$ sudo chown -R apache.apache /home/www/html/blog/wp-content
$ ls -la /home/www/html/blog/
・
drwxr-xr-x. 6 apache apache 84 1月 3 11:15 wp-content
drwxr-xr-x. 10 apache apache 164 1月 3 9:29 wp-content_bak
・
WordPress 自動バックアップ
WordPress には、バックアップのプラグインもありますが、自宅サーバーなど
シェルが利用できる環境であれば、シェルスクリプトを組む事で自動バックアップが可能になります。
バックアップさせるシェルスクリプトを作成します。
シェルスクリプトの構文や文法は、ネット上に情報がありますのでそちらで確認してください。
まずは、シェルシェルスクリプトを置くディレクトリを作成します。
筆者は、「管理ユーザーのホームディレクト」/bin/ としました。
さらに、バックアップを置くディレクトリも作成します。
「ホームディレクト」/Backup/を作成し、「Backup」の下に「MariaDB」と「Wp-content」を作成し、この中に保存しようと思います。
バックアップ用のディレクトリは、事前に作成しておきます。
$ cd
$ mkdir ./bin
$ mkdir ./Backup
$ mkdir ./Backup/MariaDB
$ mkdir ./Backup/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” を自動設定する仕様にします。
#!/bin/sh
#
# MariaDB_Backup.sh 2024/01/03 by kazuban
#
#------------------------------------
BackupDir="/home/hogehoge/Backup/MariaDB"
MysqlUser="WpAdmin"
MysqlUserPasswd="WpPasswd"
LOG="mariadb_backup.log"
#------------------------------------
cd $BackupDir
echo "`date` Execute Backup!! " >> $LOG
DATE=`date '+%Y%m%d'`
FILENAME="$DATE-MariaDB.bak"
CMD="mysqldump -u $MysqlUser -p$MysqlUserPasswd -h localhost -A "
echo $CMD >> $LOG
echo $CMD " > $FILENAME"
$CMD > $FILENAME
echo "`date` ------------ End" >> $LOG
このファイルを、適当なファイル名で、スクリプト用ディレクトリへ保存します。
筆者は「/home/hogehoge/bin/」に「MariaDB_Backup.sh」で保存しました。
このファイルは、実行できるように、実行権限を付けます
$ chmod 700 /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” を自動設定する仕様にします。
#!/bin/sh
#
# Wp-Content_Backup.sh 2024/01/03 by kazuban
#
#--------------------------------------------
BackupToDir="/home/hogehoge/Backup/Wp-content"
BackupSorceDir="/home/www/html/blog/wp-content"
LOG="wp-content_backup.log"
cd $BackupToDir
echo "`date` Execute Backup!! " >> $LOG
DATE=`date '+%Y%m%d'`
FILENAME="$DATE-Wp-content.tar.gz"
PARA="czf"
CMD="tar $PARA $FILENAME $BackupSorceDir/"
echo $CMD >> $LOG
echo $CMD
$CMD > /dev/null 2>&1
echo "`date` ------------ End" >> $LOG
このファイルも同様に「Wp-ContentBackup.sh」で保存しました。
このファイルにも、実行できるように、実行権限を付けます
$ chmod 700 /home/hogehoge/bin/Wp-Content_Backup.sh
自動バックアップ
ここでの例では、/home/hogehoge/bin ディレクトリ内にスクリプトを作成しました
まずは、正常に動作するか、確認してみます。
$ cd /home/hogehoge/bin
$ ls <---- 作成したスクリプト確認
MariaDB_Backup.sh Wp-Content_Backup.sh <----- スクリプト名確認
・
・
$ /home/hogehoge/bin/MariaDB_Backup.sh <----- スクリプト実行
mysqldump -u WpAdmin -pWpPasswd -h localhost -A > 20240107-MariaDB.bak
<---- 正常終了
$ /home/kazu/hogehoge/Wp-Content_Backup.sh <----- スクリプト実行
tar czf 20240107-Wp-content.tar.gz /home/www/html/blog/wp-content/
<---- 正常終了
$ ls /home/hogehoge/Backup/MariaDB/
20240107-MariaDB.bak mariadb_backup.log <---- 作成されている
$ ls /home/hogehoge/Backup/Wp-content
20240107-Wp-content.tar.gz wp-content_backup.log <----- 作成されている
スクリプトの正常動作が確認できたら、自動バックアップするようにスケジューリングします
スケジューリングは、「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」
をスケジュールしてみます。
$ crontab -e <--- -eオプションで設定
00 3 * * * /home/hogehoge/bin/MariaDB_Backup.sh
30 3 * * * /home/hogehoge/bin/Wp-Content_Backup.sh
・
・
$ crontab -l <--- -lオプションで確認
これで、毎日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」モジュールが組み込まれているかを確認します。
$ vi /etc/httpd/conf.modules.d/00-base.conf
・
#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#
・
・
LoadModule request_module modules/mod_request.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
・
モジュールは読み込まれています。
Apacheの、AllowOverrideの設定
Apacheの設定ファイル、「httpd.conf」を確認してみます。
# vi /etc/httpd/conf/httpd.conf
・
・
# Further relax access to the default document root:
#<Directory "/var/www/html">
<Directory "/home/www/html">
・
AllowOverride None
・
</Directory>
デフォルトでは「 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」で確認できます。
$ vi /etc/httpd/conf/httpd.conf
・
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
・
・
この設定であれば、直接「httpd.conf」を編集しなくても、
後者の「/etc/httpd/conf.d」に「wordpress.conf」を追加する方法が可能です。
$ sudo vi /etc/httpd/conf.d/wordpress.conf
<Directory "/home/www/html/blog">
AllowOverride All
</Directory>
・
・ <-------- 書き込み保存で新規作成後、httpd を再起動
$ sudo systemctl restart httpd
この設定で、正常にリンク先にアクセスできるようになりました。
これで、バックアップは定期的に自動作成されているので、
もしトラブルなどあった場合には、以前の状態に復元する事ができますし
今回の記事のテーマの、サーバー本体の引っ越しにも、使用できます。
コメント