vps の ubuntu 18.04 に django を設定して、その中にデータベースを作成し自分用のメモとして使っています。
他人にとってはほとんど意味のないデータですが、私にとっては重要なデータでありバックアップしておく必要があります。
シェルスクリプト
サーバー上で、以下のようなシェルスクリプトを作成。
#!/bin/bash
dirpath='/home/user/jsonbak'
filename=`date +%Y%m%d`.json
cd /home/django/testdjango
source venv/bin/activate
python manage.py dumpdata > $dirpath/$filename
chmod 700 $dirpath/$filename
find $dirpath -type f -daystart -mtime +3 |xargs rm -f
下から2行は古いものを削除するものですが、おそらくこれで動くはずです。
crontab 設定
crontab の設定をします。
0 2 * * * /home/user/bak.sh
これで深夜2時に自動的にバックアップが実行されます。
ローカルから scp
ローカルの linux mint 20.2 から ssh 接続ができているという前提です。
#!/bin/bash
scp -r -P 11123 -i ~/.ssh/kagoya/kagoya.key root@123.45.67.89:/home/user/jsonbak/*.json ~/backup/jsonbak
scp -r -P 11123 -i ~/.ssh/kagoya/kagoya.key root@123.45.67.89:/home/django/testdjango/media ~/backup/mediabak
# json のインポート
cd ~/backup/jsonbak
latest=`ls -rt | tail -n 1`
echo $latest
cd ~/backup/testdjango
source venv/bin/activate
python manage.py loaddata ~/backup/jsonbak/$latest
# media のコピー
cp -r ~/backup/mediabak/media ~/backup/testdjango
データベースだけではなくて、画像もアップロードしているので、そしてそれは media の中に蓄積されているので、フォルダごと scp ダウンロードした後でローカル環境の media に上書きしています。
これで、プライベートなデータベースのバックアップがとても簡単になりました。
NAS 上でバックアップする
ローカルのシェルスクリプトに crontab を設定しようかと思ったのですが、自宅でコンピュータの電源をオンにするのは不定期なので、バックアップを NAS にさせるようにしました。
ローカルのシェルスクリプトをほとんどそのまま使えますが、ssh キーはパーミッションの設定が必要なようです。
以下のようにしました。
chmod 700 .ssh
chmod 700 .ssh/kagoya
chmod 600 .ssh/kagoya/kagoya.key
json データと media の保存先を homes 以外の所に設定します。
そしてタスクスケジューラで深夜に1回シェルスクリプトを実行するようにします。
これで、json と media が毎日バックアップされ、ほぼ同時に rsync で他の NAS に同期され、さらに1日1回外付けHDDにバックアップされます。
これで私のメモ代わりのデータベースのバックアップは完璧になりました。