前にも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を修復した
