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