set -eUSER="backup"PASSWORD="backup"#定义变量=数据库数据目录DATA_DIR="/data/mysql"BIN_INDEX=$DATA_DIR"/mysql-bin.index"#定义备份目录=备份存放路径BACKUP_DIR="/data/backup/mysql"BACKUP_LOG="/var/log/mysql/backup.log"DATE=`date +"%Y%m%d"`TIME=`date +"%Y%m%d%H"`LOG_TIME=`date +"%Y-%m-%d %H:%M:%S"`DELETE_BINLOG_TIME="7 day"INCREMENT_INTERVAL="3 hour"note() {printf "[$LOG_TIME] note: $*\n" >> $BACKUP_LOG;}warning() {printf "[$LOG_TIME] warning: $*\n" >> $BACKUP_LOG;}error() {printf "[$LOG_TIME] error: $*\n" >> $BACKUP_LOG;exit 1;}full_backup() {local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`for db in $dbsdolocal backup_dir=$BACKUP_DIR"/full/"$dblocal filename=$db"."$DATElocal backup_file=$backup_dir"/"$filename".sql"if [ ! -d $backup_dir ]thenmkdir -p $backup_dir || { error "创建数据库 $db 全量备份目录 $backup_dir 失败"; continue; }note "数据库 $db 全量备份目录 $backup_dir 不存在,创建完成";finote "full backup $db start ..."mysqldump --user=${USER} --password=${PASSWORD} --flush-logs --skip-lock-tables --quick $db > $backup_file || { warning "数据库 $db 备份失败"; continue; }cd $backup_dirtar -cPzf $filename".tar.gz" $filename".sql"rm -f $backup_filechown -fR mysql:mysql $backup_dirnote "数据库 $db 备份成功";note "full backup $db end."done}increment_backup() {local StartTime=`date "-d $INCREMENT_INTERVAL ago" +"%Y-%m-%d %H:%M:%S"`local DELETE_BINLOG_END_TIME=`date "-d $DELETE_BINLOG_TIME ago" +"%Y-%m-%d %H:%M:%S"`local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`mysql -u$USER -p$PASSWORD -e "purge master logs before '$DELETE_BINLOG_END_TIME'" && note "delete $DELETE_BINLOG_TIME days before log";filename=`cat $BIN_INDEX | awk -F "/" '{print $2}'`for i in $filenamedofor db in $dbsdolocal backup_dir=$BACKUP_DIR"/increment/"$dblocal filename=$db"."$TIMElocal backup_file=$backup_dir"/"$filename".sql"if [ ! -d $backup_dir ]thenmkdir -p $backup_dir || { error "创建数据库 $db 增量备份目录 $backup_dir 失败"; continue; }note "数据库 $db 增量备份目录 $backup_dir 不存在,创建完成";finote "increment backup $db form time $StartTime start ..."mysqlbinlog -d $db --start-datetime="$StartTime" $DATA_DIR/$i >> $backup_file || { warning "数据库 $db 备份失败"; continue; }note "increment backup $db end."donedonefor db in $dbsdolocal backup_dir=$BACKUP_DIR"/increment/"$dblocal filename=$db"."$TIMElocal backup_file=$backup_dir"/"$filename".sql"cd $backup_dirtar -cPzf $filename".tar.gz" $filename".sql"rm -f $backup_filenote "数据库 $db 备份成功";done}case "$1" infull)full_backup;;increment)increment_backup;;*)exit 2;;esacexit 1