[linux][bash] シェルでバックアップスクリプトを書くよ

[linux][bash] シェルでバックアップスクリプトを書くよ

夏の終わりは毎年テンションだだ下がりな nakamura です。みなさんこんにちは。

以前に データベースのバックアップ について書いた事がありますが、バックアップしておきたいものはもちろんそれだけではなくコンテンツ領域だったりサーバ設定ファイルだったり色々あると思います。今日はそういったファイル群をバックアップするシェルスクリプトをちょっとだけ晒してみます。

記述例

とりあえず貼っつけておきます。以下がバックアップ対象のディレクトリをアーカイブ化するスクリプト。

#!/bin/bash
# @filename archive.sh

# バックアップ先
BAKDIR="/var/backup/files";
# バックアップ元 ( tar コマンドでエラーになるので先頭の / は外す )
SRCDIRS="
var/www/
var/spool/
etc/
";

# バックアップ先がなければ作成
[ ! -d ${BAKDIR} ] && mkdir -p ${BAKDIR};

# バックアップ実行
cd /;
tar -czf ${BAKDIR}/`date +%Y%m%d`.files.tar.gz ${SRCDIRS} 1> /dev/null;

# 2 週間より古いバックアップは削除
find ${BAKDIR} -type f -mtime +15 -exec rm -f {} \;;

そして以下がアーカイブ化したファイル群をリモートのバックアップ先に転送するスクリプト。

#!/bin/bash
# @filename sync_backup.sh

# バックアップに使用するユーザ名
BKUSER="bkuser";
# リモートホスト名
REMOTE="backup.example.com";
# バックアップディレクトリ
BAKDIR="/var/backup/";
# 使用する SSH キー
SSHKEY="/var/backup/.ssh/bkuser.ssh2.key";
# rsync コマンドのオプション
export RSYNC_RSH="ssh -i ${SSHKEY}";
OPT="-a --delete";

# リモートにバックアップ
rsync ${OPT} ${BAKDIR} ${BKUSER}@${REMOTE}:/var/backup/`hostname -s`/;

これを以下のように cron でつなげて実行しています。

33 4 * * *       /var/backup/scripts/archive.sh && /var/backup/scripts/sync_backup.sh

終わりに

すごくシンプルなバックアップ方法ですが、さほど規模の大きくないサーバ構成であればこの程度で充分かなぁと思います。社内サーバ群のバックアップとか。参考になれば幸いです!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ