xserver のバックアップデータベースを NAS へ

(2025-09-04)

xserver 上で動いているデータベースを NAS に定時にバックアップします。

xserver 上でデータベースをバックアップ

現在、xserver 上でいくつかのデータベースが動いていますが、基本的には毎日自動的にバックアップをとっています。

データベースだけは消えてしまうと悲劇的なので、しつこいくらいのバックアップをとります。

これまでは順調に動いていたプログラムなのですが、どういうわけか一部不具合が出るようになりました。
古いダンプファイルが削除されなくなったのです。

例によって chatGPT に解決してもらいました。以下のようなシェルスクリプトを作成します。

#!/bin/sh
dirpath='~/DBbak/vocabula'
# 今日のバックアップファイル名
filename=vocabula_$(date +%y%m%d)
# バックアップ作成
mysqldump -uuser -ppass vocabula > "$dirpath/$filename.sql"
chmod 700 "$dirpath/$filename.sql"
# 最新の7つ以外を削除
ls -1t "$dirpath"/vocabula_*.sql | tail -n +8 | xargs -r rm -f

このシェルスクリプトを cron で 1 日 1 回実行すれば、自動的にデータベースのダンプファイルが作成され、古いものは自動的に削除されます。

NAS から xserver に rsync

xserver 上のデータベースもダンプファイルも簡単に消えるとは思えませんが、念のために NAS から rsync します。
NAS 上のプログラムを実行することによってファイルを xserver から NAS へと同期します。

これも chatGPT に作ってもらいました。

#!/bin/sh
logdir="/volume1/backup/laravel_bak/logs"
# vocabula
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
moheno@sv12345.xserver.jp:~/DBbak/vocabula \
/volume1/backup/laravel_bak \
>> "$logdir/rsync_vocabula_$(date +%Y%m%d%H%M%S).log" 2>&1
# djanmemo
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
moheno@sv12345.xserver.jp:~/DBbak/djanmemo \
/volume1/backup/laravel_bak/webmemo \
>> "$logdir/rsync_djanmemo_$(date +%Y%m%d%H%M%S).log" 2>&1
# public storage
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
moheno@sv12345.xserver.jp:~/djanmemo.com/sample1/storage/app/public \
/volume1/backup/laravel_bak/webmemo \
>> "$logdir/rsync_public_$(date +%Y%m%d%H%M%S).log" 2>&1
# ==========================
# 古いログを削除(30日より前のもの)
# ==========================
find "$logdir" -type f -name "rsync_*.log" -mtime +30 -exec rm -f {} \;

これまで、rsync を一行で書いていましたが、横に長くなると可読性が悪くなります。
バックスラッシュで行を変えるのはとても賢いですね。

これも cron で 1 日 1 回実行します。

タスクスケジューラではうまくいきません。
おそらく、IPTV の録画設定で頻回に cron をいじっているので動作しなくなるのだと思います。cron であれば問題なく動作します。

NAS の hyperbackup で外付け HDD へ

NAS のデータは更に別の NAS に rsync でリアルタイムに同期していますが、 さらに、NAS に接続した外付け HDD へ hyperbackup で 1 日 1 回バックアップします。

データベースだけは無くなってもらっては困るので本当にしつこいくらいのバックアップをしています。

まあ、これで一安心ですね。