新しいMySQLバックアップスクリプト

前にもMySQLのバックアップスクリプトを紹介することはありましたけど、あれからバックアップのサイズがどんどん増えて、FTPサーバーの容量状態はちょっと厳しくなってしまいました。ですから、今回の新しいスクリプトにはまず、圧縮機能を追加しました

それに、その古いスクリプはwputを利用してファイルをftpで転送したから、とても不安全でした。だからついでに、今度はlftpを利用してftpsで転送します。もちろんどうしても必要なら、ftpでもおkです。スクリプでFTP_PROTOCOLを指定したらいいです
それからもし自分のサインした証明証を使っていますなら、

set ssl:verify-certificate no

を/etc/lftp.conf追加することを忘れないように

更に、今回はバックアップファイルを強制的にアップロードするためのスクリプトを提供しました。

/PATH/TO/BACKUP/MySQL_Backup/script/force_upload.sh N

を実行したら、N日間前のファイルをアップロードできます

├── database1_ddmmYY-HHiiss.sql.tar.xz
├── database2_ddmmYY-HHiiss.sql.tar.xz
└── script
    ├── backup.sh
    ├── delete.txt
    ├── force_upload.sh
    ├── log.txt
    └── to_backup.txt
database_1
database_2
database_3
#!/bin/bash
BK_PATH=$( readlink -m $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/.." )
DATE="`date +'%m%d%Y-%H%M%S'`"

CONFIG_PATH="$BK_PATH/script"
DB_USER="root"
DB_PASS="123456"
DB_TOBACKUP="to_backup.txt"
LOG="log.txt"
DELETE="delete.txt"
FTP_HOST="onee3.org"
FTP_PROTOCOL="ftps"
FTP_PORT=4433
FTP_USERNAME="admin"
FTP_PASSWORD="123456"
FTP_DIRECTORY="MySQL_Backup"

LOGDATE="`date +'%m/%d/%Y-%H:%M:%S'`"
echo "---------------Backup Starts @ ""$LOGDATE""---------------" >> $CONFIG_PATH/$LOG

echo -----Backup----- >> $CONFIG_PATH/$LOG
cat $CONFIG_PATH/$DB_TOBACKUP | while read LINE
do
    mysqldump --opt --force -u$DB_USER -p$DB_PASS $LINE > "$BK_PATH/""$LINE""_$DATE.sql"
    tar Jcvf "$BK_PATH/""$LINE""_$DATE.sql.tar.xz" "$BK_PATH/""$LINE""_$DATE.sql"
    rm "$BK_PATH/""$LINE""_$DATE.sql"
    echo $LINE >> $CONFIG_PATH/$LOG
done

echo -----Delete----- >> $CONFIG_PATH/$LOG
find $BK_PATH -ctime +7 -type f -name "*.sql.tar.xz" -print > $CONFIG_PATH/$DELETE
if [[ -s $CONFIG_PATH/$DELETE ]]; then
    lftp -u $FTP_USERNAME,$FTP_PASSWORD -p $FTP_PORT -e "mkdir $FTP_DIRECTORY; quit;" "$FTP_PROTOCOL://$FTP_HOST"
fi
cat $CONFIG_PATH/$DELETE | while read LINE
do
    lftp -u $FTP_USERNAME,$FTP_PASSWORD -p $FTP_PORT -e "cd $FTP_DIRECTORY; put $LINE; quit;" "$FTP_PROTOCOL://$FTP_HOST"
    rm $LINE
    echo $LINE >> $CONFIG_PATH/$LOG
done

LOGDATE="`date +'%m/%d/%Y-%H:%M:%S'`"
echo "---------------Backup Ends   @ ""$LOGDATE""---------------" >> $CONFIG_PATH/$LOG
#!/bin/bash
BK_PATH=$( readlink -m $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/.." )

CONFIG_PATH="$BK_PATH/script"
DB_USER="root"
DB_PASS="123456"
DB_TOBACKUP="to_backup.txt"
DELETE="delete.txt"
FTP_HOST="onee3.org"
FTP_PROTOCOL="ftps"
FTP_PORT=4433
FTP_USERNAME="admin"
FTP_PASSWORD="123456"
FTP_DIRECTORY="MySQL_Backup"

if [[ -z $1 ]]; then
    echo "Parameter required"
    exit 1
fi

find $BK_PATH -ctime +$1 -type f -name "*.sql.tar.xz" -print > $CONFIG_PATH/$DELETE
if [[ -s $CONFIG_PATH/$DELETE ]]; then
    lftp -u $FTP_USERNAME,$FTP_PASSWORD -p $FTP_PORT -e "mkdir $FTP_DIRECTORY; quit;" "$FTP_PROTOCOL://$FTP_HOST"
fi
cat $CONFIG_PATH/$DELETE | while read LINE
do
    echo $LINE
    lftp -u $FTP_USERNAME,$FTP_PASSWORD -p $FTP_PORT -e "cd $FTP_DIRECTORY; put $LINE; quit;" "$FTP_PROTOCOL://$FTP_HOST"
done


UPDATE:

2015/08/21 $LOGDATEを修復した

コメントを残す