上書き保存して版数管理のバックアップができました!
あ〜!あのせこい作戦工夫した方法できたの?
はい!できました〜。
私も参考にするから、わかりやすくよろしくね。
ということで、今回は完結編です。わかりやすくはできないかもですが、要点を記録しておきますね。
バックアップスクリプトはプラグインで
BackWPup – WordPress Backup Plugin
https://ja.wordpress.org/plugins/backwpup/
結局、DBのバックアップスクリプトやファイルの指定などシェルで書かずにワードプレスの↑のプラグインでやることにしました。BackWPupの操作方法はググって貰えばわかると思うので、省きますが以下のように7つのジョブをつくることにしました。
BackWPupは、ジョブをwp-cliで叩けるようになっています。そして、それをcronで定期実行するという方法です。wp-cliでは、以下のようにコマンド叩くと、ジョブIDがわかります。
$ wp backwpup jobs
+--------+--------------------+
| Job ID | Name |
+--------+--------------------+
| 1 | hackgpljp_db |DBのバックアップ
| 2 | hackgpljp_uploads |uploadsの必要なものだけ
| 3 | hackgpljp_etc |Termuxのetc配下の設定ファイル
| 4 | hackgpljp_themes |テーマファイル
| 5 | hackgpljp_plugins |プラグイン全部
| 6 | hackgpljp_wpconfig |WordPressの設定関連
| 7 | hackgpljp_log |Termuxのログ全部
+--------+--------------------+
これらのジョブを実行すると、指定したバックアップディレクトリに圧縮されて保存されます。
スクリプトは最低限
プラグインでバックアップしたファイル名にはハッシュ文字列が付いています。このハッシュ文字列は、プラグイン中の設定で消すことができなかったので、スクリプトでファイル名を固定します。rcloneでGoogleDriveに同期したときに上書きされるようにして版数が作られるようにするためです。以下のようなファイルツリーを目指します。
├── hackgpljp_db.zip
├── hackgpljp_etc.zip
├── hackgpljp_log.zip
├── hackgpljp_plugins.zip
├── hackgpljp_themes.zip
├── hackgpljp_uploads.zip
├── hackgpljp_wpconfig.zip
├── log
│ └── backwpup_log.html.gz
└── php.ini
手抜きですが、以下のようなスクリプトができました。
#!/bin/bash
PATH=PATH:/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/home/bin
#バックアップ先
BACKUP_PATH="/backup/dir/path"
LOG_PATH="/backup/dir/path/log"
# GoogleDrive のrcloneドライブ名
DRIVENAME=01bup
# GoogleDrive の保存ディレクトリ
CPATH=hackgpljp
mvBACKUP_PATH/hackgpljp_db_* BACKUP_PATH/hackgpljp_db.zip
mvBACKUP_PATH/hackgpljp_etc_* BACKUP_PATH/hackgpljp_etc.zip
mvBACKUP_PATH/hackgpljp_log_* BACKUP_PATH/hackgpljp_log.zip
mvBACKUP_PATH/hackgpljp_plugins_* BACKUP_PATH/hackgpljp_plugins.zip
mvBACKUP_PATH/hackgpljp_themes_* BACKUP_PATH/hackgpljp_themes.zip
mvBACKUP_PATH/hackgpljp_uploads_* BACKUP_PATH/hackgpljp_uploads.zip
mvBACKUP_PATH/hackgpljp_wpconfig_* BACKUP_PATH/hackgpljp_wpconfig.zip
cp -p /data/data/com.termux/files/usr/lib/php.iniBACKUP_PATH/php.ini
mv LOG_PATH/backwpup_log_*LOG_PATH/backwpup_log.html.gz
tree -N BACKUP_PATH
echo ''
echo "rclone sync start : " `date +'%H:%M:%S.%3N'`
rclone syncBACKUP_PATH/ DRIVENAME:CPATH
echo "rclone sync end : " `date +'%H:%M:%S.%3N'`
cronで定期実行
termuxはcronもちゃんと動くようです。一番、ネットワークが空いている時間帯に動作させます。まず、WordPressのバックアップジョブを動作させ、一番最後の4:00から動くのは、先ほどのスクリプトです。
# hackgpljp_db
30 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 1 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_etc
31 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 3 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_themes
31 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 4 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_plugins 5m
32 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 5 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_wpconfig
37 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 6 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_uploads maybe 10m
38 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 2 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_log
48 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 7 --path=/data/data/com.termux/files/home/htdocs_nginx/
##
## Sync Google Drive
##
00 04 * * * /data/data/com.termux/files/home/backup/0_bup_to_googledrive.sh
一応、テストはしてきます。ちなみに、このファイルツリー・約1.1GBのファイルをsyncするのにかかった時間は、約2分10秒でした。
rclone sync start : 19:48:41.010
rclone sync end : 19:50:52.552
GoogleDrive側は?
ちゃんと上書きされて、版ができるか確認しておきます。
土曜日にテストしていたのですが、日・月とちゃんと動作しているようですね! この画像はuploadsの画像フォルダのバックアップですが圧縮しても1GBはあります。現行版を含めて4つファイルはあり、普通にバックアップしていれば4GBになりますが、ディスク消費は1.1GBです。
版を消さないようにすると、
保存容量にカウントされるようです。(リロード後、容量は変わります)
なるほど、「この履歴を削除しない」は必要な時だけ使うようにします。
まとめ
今後の課題も見つかりましたのでまとめにメモをしておきます。
・GoogleDriveの版は、保存容量を消費しない。
・しかし、「この履歴を削除しない」とすると消費される
・cronのメールはsendmailが動作してないので、飛んでこない
・sendmailの代わりに、msmtpが良さそうかも。
・版は100個まで保存されるが、過去30日で消えるそうなので実質、30日前までは戻せる。(たぶん)
あとがき
termuxで、cronのメールを飛んでくるようにするには、sendmail相当の何かを入れる必要があります。定番は、msmtpということのようです。