広告

WordPress の「バックアップ・リストア」BASHスクリプト

AI

バックアップ・リストアの記事は、以前こちらでも紹介しました

RockyLinux9.3で自宅サーバーを再構築V07・WordPress のバックアップとリストア
引越しするには、旧環境のデータをバックアップし、新環境へリストアします。WordPress のバックアップとリストアの方法を説明し、自動バックアップするスクリプトを作成します。バックアップ・リストアができると、引越しだけでなく、トラブル時にも以前の状態まで戻せます。
広告

新しいBASH

前回のスクリプトは、2020年に紹介したコマンド操作をネット情報を参考にスクリプト化しましたが、今回はこのスクリプトをAIに投げて、最新のBASH構文への変換を教えてもらいながら作成しました。
投稿のスクリプト類はちょっと長くなりましたが、全てコピペできるようにしました。
また、開発途中ではBASHで一行づつのデバッグもやってみました。

デバッグ

編集はVSCodeを利用したので、デバッグプラグインもインストールしてみましたが、あまり思ったように動いてくれませんでした。
AIに聞いてみると、BASH自体にも、構文チェックやステップデバッグができる機能があるようです

shellcheck

shellcheck [スクリプト名.sh]のようにコマンド実行するだけで、スクリプトのバグや構文エラーを簡単にチェックできます。
パッケージ名は、キャメルケース的書き方「ShellCheck」になるので注意が必要です

もしパッケージが見つからない場合には、EPELリポジトリが有効になっていない可能性があるのでEPELを有効化した上で再度インストール

shellcheck は、スクリプトのバグや構文エラーを検出してエラーコードと共に表示してくれます。
標準では致命的でない場合でも警告を出してくるのでちょっとうるさく感じる事もありますが、
エラーコードをAIに聞くことでより安全なコードの書き方の学習にもなります

set コマンド

Bashの set コマンドは、シェルの動作やオプションを設定・変更するためのコマンドです。
主にスクリプトの安全運転モードやデバッグのために、シェルの冒頭でオプションと組み合わせて使用されます
・set -euo pipefail
実務でよく使われる定番のオプション
これにより、スクリプト実行時のバグや予期せぬトラブルを大幅に減らせます

set -x: デバッグ開始
実行されるコマンドや変数の展開結果をすべて画面(標準エラー出力)に表示

set +x: デバッグ開始
実行トレース出力を停止

・trap ‘read -p “STEP> ” < /dev/tty’ DEBUG
実行中、すべてのコマンドを実行する直前で指定文字(STEP>)プロンプトで一時停止

・export PS4=’+ ${LINENO}: ‘
デバッグモード(set -x)で実行されるコマンドを表示する際、そのコマンドのスクリプトでの行番号を出力に含める設定

これらコードをスクリプト上部で実行しておくことで、シェルスクリプトのバグの原因特定が早くなります。
サンプルコードを書いてみました。


このコードを実行すると、デバッグの状況が体験できます

次に今回作成したWordPressのバックアップ&リストアのスクリプトを紹介します
デバッグコードは、Header.sh に別スクリプトにして、呼び出す形式にしました。

スクリプト構成

WordPressのバックアップは、大きく分けて「ファイル(サーバー内のデータ)」と「データベース(MySQL/MariaDB)」の2つが必要になります。
前回スクリプトは、昔の経験とネット検索を参考に、自分で作成しましたが
今回は、BASHもかなり進化しているみたいなので、AIのサポートで最新の構文で書き直しました。
バックアップファイルやスクリプトの構成は
・「ユーザーホーム」内に、「Backup」ディレクトリを作成
・「Backup」内に、「WordPress」と「bin」ディレクトリを作成
・「WordPress」内にWordPress パッケージをインストールしたディレクトリ名(筆者環境では「blog」)を作成します
・「blog」内に、データベースとサーバー内データのバックアップを保存します
・「bin」内に実行スクリプトを保存します

.[ユーザーホームディレクトリ]
├── Backup #「バックアップデータを保存する」
│ ├── WordPress #「WordPerss関連データ」
│ │ └── blog #「blog内のバックアップデータ」
│ │ ├── 20260530-MariaDB.bak # データベースバックアップ
│ │ ├── 20260530-Wp-content.tar.gz # WordPressコンテンツ
│ │ ├── mariadb_backup.log
│ │ └── wp_backup.log
│ ├── bin #「スクリプト」
│ │ ├── Header.sh #「デバッグ用のスクリプト」
│ │ ├── MariaDB_Backup.sh #「データベースのバックアップ」
│ │ ├── MariaDB_Restore.sh #「データベースのリストア」
│ │ ├── Tidyup_backfile.sh #「バックアップデータの整理」
│ │ ├── WordPress_Config_Data.sh #「バックアップ環境の設定」
│ │ ├── Wp-Backup.sh #「バックアップ用メインスクリプト」
│ │ ├── Wp-Content_Backup.sh #「WordPressデータのバックアップ」
│ │ ├── Wp-Content_Restore.sh #「WordPressデータのリストア」
│ │ └── Wp-Restore.sh #「リストア用メインスクリプト」

WordPress_Config_Data.sh : 変数設定

Wp-Backup.sh : データベース&WordPressコンテンツのバックアップ

MariaDB_Backup.sh : データベースバックアップ(Wp-Backup.shから呼ばれる)

Wp-Content_Backup.sh : WordPressコンテンツバックアップ(Wp-Backup.shから呼ばれる)

Wp-Restore.sh : データベース&WordPressコンテンツの復元

MariaDB_Restore.sh データベース復元(Wp-Restore.shから呼ばれる)

Wp-Content_Restore.sh: WordPressコンテンツ復元(Wp-Restore.shから呼ばれる)

Header.sh : デバッグモード仕様(変数 DEBUG=1 で有効)

Tidyup_backfile.sh : バックアップファイルの整理(引数:対象ディレクトリ・保存日数)

自動バックアップ

こちらでも、紹介していますが、「crontab」に下記のように設定する事で、毎日2時に自動バックアップできるようになります

00 2 * * *        /home/kazuban/Backup/bin/Wp-Backup.sh all

コメント

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