$TMPBACKUPNOLIST echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST # 前回バックアップをリネーム cd $BACKUPDIR OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null` if [ -f $OLDBACKUPFILE ]; then TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -` mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1 fi # バックアップログファイル作成 rm -f $BACKUPLOG touch $BACKUPLOG chmod 400 $BACKUPLOG # バックアップ実行 echo "`date` backup start" >> $BACKUPLOG tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1 code=$? if [ $code -ne 0 ]; then cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root rm -f $BACKUPDIR/backup.tar.bz2 error_exit fi echo "`date` backup end" >> $BACKUPLOG # バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ) if [ ! -z $PASS ]; then echo "`date` encrypt start" >> $BACKUPLOG mkdir -p $HOME/.gnupg echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1 code=$? if [ $code -ne 0 ]; then cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root rm -f $BACKUPDIR/backup.tar.bz2* error_exit fi rm -f $BACKUPDIR/backup.tar.bz2 echo "`date` encrypt end" >> $BACKUPLOG fi # バックアップ保存世代を超えた古いバックアップを削除 if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN` for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT` do rm -f $file done fi # バックアップ対象外リスト削除 rm -f $TMPBACKUPNOLIST [root@ml110 ~]# chmod 700 backup.sh ← バックアップスクリプトへ実行権限付加 backuplist バックアップ対象リスト作成 [root@ml110 ~]# echo "/home" >> backuplist backupnolist バックアップ対象外リスト作成 [root@ml110 ~]# echo "/home/mysql" >> backupnolist バックアップ定期実行設定 毎日1時に実行 [root@ml110 ~]# echo "0 1 * * * root /root/backup.sh" > /etc/cron.d/backup mysqlのバックアップ mysql-backup.sh 作成 [root@ml110 ~]# vi mysql-backup.sh #!/bin/bash PATH=/usr/local/mysql/bin:/usr/bin:/bin # バックアップ先ディレクトリ BACKDIR=/backup/mysql # MySQLrootパスワード ROOTPASS=******** # バックアップ先ディレクトリ再作成 rm -rf $BACKDIR mkdir -p $BACKDIR # データベース名取得 DBLIST=`ls -p /usr/local/var | grep / | tr -d /` # データベースごとにバックアップ for dbname in $DBLIST do mysqldump -uroot -p$ROOTPASS $dbname > $BACKDIR"/"$dbname".sql" done [root@ml110 ~]# chmod 700 mysql-backup.sh ← バックアップスクリプトへ実行権限付加 バックアップ定期実行設定 毎日0時に実行 [root@ml110 ~]# echo "0 0 * * * root /root/mysql-backup.sh" >> /etc/cron.d/backup ftpコマンドでサーバーからバックアップを自動取得する。 backup.scr windows機でftpコマンドのファイル作成 mysqlバックアップも取得する open ftp.example.com user ← ユーザ名を指定 xxxxxxxx ← パスワードを指定 prompt  ← 対話モードを解除 binary get /backup/backup.tar.bz2 mget /backup/mysql/* ← mysqlバックアップも取得 quit backup.bat 同じ場所に作成 @ECHO OFF ftp -s:backup.scr > backup.log backup.batをスタートアップに登録す " />

itoigawabass

itoigawaのブログ

自動バックアップ

2014-08-14

サーバーを自動で バックアップ するようにした。
参考サイトCentOSで自宅サーバー構築

tarコマンドで圧縮してバックアップしておき、windows機からftpコマンドで取得する
backup.sh スクリプト作成



[root@ml110 ~]# vi backup.sh
#!/bin/bash

#
# ローカル内でバックアップ
#

LANG=C

#
# 設定開始
#

# バックアップ対象リスト名
# バックアップ対象をフルパスで記述したリスト
BACKUPLIST=/root/backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit

# バックアップ対象外リスト名
# ※バックアップ対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/backupnolist

# バックアップ先ディレクトリ名
BACKUPDIR=/backup
mkdir -p $BACKUPDIR

# バックアップ保存世代数
# ※当日分を含めた過去分バックアップを保存する世代数
# ※過去分バックアップを保存しない場合は1を指定する
BACKUPGEN=8

# 暗号化・復号化パスフレーズ
# ※指定がないときは暗号化しない
PASS=''

# バックアップログファイル名
BACKUPLOG=/var/log/backup.log

#
# 設定終了
#

# 異常終了処理関数定義
error_exit () {
    rm -f $TMPBACKUPNOLIST
    exit 1
}

# バックアップファイルをバックアップ対象外リストに追加
# ※バックアップ先ファイルをバックアップしないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST

# 前回バックアップをリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi

# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG

# バックアップ実行
echo "`date` backup start" >> $BACKUPLOG
tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1
code=$?
if [ $code -ne 0 ]; then
    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
    rm -f $BACKUPDIR/backup.tar.bz2
    error_exit
fi
echo "`date` backup end" >> $BACKUPLOG

# バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ)
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1
	code=$?
	if [ $code -ne 0 ]; then
	    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
	    rm -f $BACKUPDIR/backup.tar.bz2*
	    error_exit
	fi
    rm -f $BACKUPDIR/backup.tar.bz2
    echo "`date` encrypt end" >> $BACKUPLOG
fi

# バックアップ保存世代を超えた古いバックアップを削除
if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then
    OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN`
    for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT`
    do
        rm -f $file
    done
fi

# バックアップ対象外リスト削除
rm -f $TMPBACKUPNOLIST

[root@ml110 ~]# chmod 700 backup.sh ← バックアップスクリプトへ実行権限付加


backuplist バックアップ対象リスト作成

[root@ml110 ~]# echo "/home" >> backuplist


backupnolist バックアップ対象外リスト作成

[root@ml110 ~]# echo "/home/mysql" >> backupnolist

バックアップ定期実行設定 毎日1時に実行

[root@ml110 ~]# echo "0 1 * * * root /root/backup.sh" > /etc/cron.d/backup

mysqlのバックアップ
mysql-backup.sh 作成


[root@ml110 ~]# vi mysql-backup.sh
#!/bin/bash

PATH=/usr/local/mysql/bin:/usr/bin:/bin

# バックアップ先ディレクトリ
BACKDIR=/backup/mysql

# MySQLrootパスワード
ROOTPASS=********

# バックアップ先ディレクトリ再作成
rm  -rf $BACKDIR
mkdir -p $BACKDIR

# データベース名取得
DBLIST=`ls -p /usr/local/var | grep / | tr -d /`

# データベースごとにバックアップ
for dbname in $DBLIST
do
  mysqldump -uroot -p$ROOTPASS $dbname > $BACKDIR"/"$dbname".sql"
done


[root@ml110 ~]# chmod 700 mysql-backup.sh ← バックアップスクリプトへ実行権限付加

バックアップ定期実行設定 毎日0時に実行

[root@ml110 ~]# echo "0 0 * * * root /root/mysql-backup.sh" >> /etc/cron.d/backup

ftpコマンドでサーバーからバックアップを自動取得する。
backup.scr windows機でftpコマンドのファイル作成
mysqlバックアップも取得する

open ftp.example.com
user ← ユーザ名を指定
xxxxxxxx ← パスワードを指定
prompt  ← 対話モードを解除
binary
get /backup/backup.tar.bz2
mget /backup/mysql/* ← mysqlバックアップも取得
quit

backup.bat 同じ場所に作成

@ECHO OFF
ftp -s:backup.scr > backup.log

backup.batをスタートアップに登録す


HP ProLiant ML110 G6
2014-08-14 18:19:17

カテゴリー:サーバー
タグ: