LoginSignup
19
21

More than 5 years have passed since last update.

rsyncで差分バックアップするスクリプトなど

Posted at

はじめに

レンタルサーバやVPSを借りていると不意にデータが飛ぶことがたまにありますよね。

そんなときに備えて自宅サーバにリモートサーバのデータを差分でバックアップしておけると安心です。

有償/無償/商用も含めて様々なソリューションがあると思いますが、自分はお手軽にrsyncだけで実施しています。

方針

リモートのサーバAから、手元のサーバBにバックアップします。

  • リモートサーバA(IPアドレスaaa.bbb.ccc.ddd)
    • [cron]リモートサーバA内のバックアップ対象データを /for_backup/ に集める
  • 手元のサーバB
    • [cron]rsyncで A:/for_backup/ を /remote_a_backup/latest に転送する
    • [cron]rsyncで /remote_a_backup/latest を /remote_a_backup/YYYYMMDD に差分バックアップする

スクリプト

リモートサーバA内のバックアップ対象データを /for_backup/ に集める

まあ適当に。

gather_for_backup.sh
#!/bin/sh
rsync --progress -av --delete /etc                     /for_backup/
rsync --progress -av --delete /data                    /for_backup
rsync --progress -av --delete /root/bin                /for_backup/root
rsync --progress -av --delete /var/lib/mysql           /for_backup/var/lib
...

# chown for rsync
chown -R takeuchi.rsync /for_backup

rsyncで A:/for_backup/ を /remote_a_backup/latest に転送する

rsync_from_remote_server.sh
#!/bin/sh
rsync --progress -avz -e ssh --delete --bwlimit=150 takeuchi@aaa.bbb.ccc.ddd:/for_backup/ /remote_a_backup/latest

rsyncで /remote_a_backup/latest を /remote_a_backup/YYYYMMDD に差分バックアップする

rotation.sh
#!/bin/sh
# 世代バックアップ

# ROTATE_DAYS : LATEST_DIR を含めて何世代バックアップするか
ROTATE_DAYS=30
#
BASEDIR=/remote_a_backup
LATEST_DIR=${BASEDIR}/latest/
NEW_DIR=${BASEDIR}/`date -d '-1 day' +%Y%m%d`/
LINK_DIR=${BASEDIR}/`date -d '-2 day' +%Y%m%d`/
OLDEST_DIR=${BASEDIR}/`date -d "-$ROTATE_DAYS day" +%Y%m%d`/

rm -rf $OLDEST_DIR
rsync -avz --progress --delete --link-dest=$LINK_DIR $LATEST_DIR $NEW_DIR

crontab(ローカルサーバ)

crontab
0 7 * * * /remote_a_backup/rsync_from_remote_server.sh > /tmp/a-backup-rsync.log; /remote_a_backup/rotation.sh > /tmp/a-backup-rotation.log

本当はもう少し異常系の処理が必要とは思いますけど 30 日以内に気づくという前提で。。

19
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
21