#!/bin/bash
#
# author: 
# desc: 

MAXIMUM_BACKUP_FILES=7
BACKUP_FOLDERNAME="back_data"
DB_HOSTNAME="localhost"
#数据库的账号密码和要备份的库,根据自己的实际情况进行备份!
DB_USERNAME="db_user"
DB_PASSWORD="password"
DATABASES=(
    "db_one"
)

#=======================
echo "Base Database Backup Tool"
CURRENT_DATA=$(date +%F)
BACKUP_FOLDER="${BACKUP_FOLDERNAME}_${CURRENT_DATA}"
/bin/mkdir /app/data_backup/themis_db/$BACKUP_FOLDER
count=0
while [ "x${DATABASES[count]}" != "x" ];do
    count=$(( count + 1 ))
done
echo "[+] ${count} databases will be backupd..."

for DATABASE in ${DATABASES[@]};do
    echo "[+] Mysql-Dumping: ${DATABASE}"
    echo -n " Began:  ";echo $(date)
    if $(${mysql_path}/mysqldump -h${DB_HOSTNAME} -u${DB_USERNAME} -p${DB_PASSWORD} ${DATABASES} > "${back_dir}/${BACKUP_FOLDER}/${DATABASE}.sql");then
        echo " Dumped successfully!"
    else
        echo " Failed dumping this database!"
    fi    
        echo -n "   Finished: ";echo $(date)
done
echo
echo "[+] Packaging and compressing the backup folder..."
tar -cv ${back_dir}/${BACKUP_FOLDER} | bzip2 > ${back_dir}/${BACKUP_FOLDER}.tar.bz2 && rm -rf ${back_dir}/${BACKUP_FOLDER}
BACKUP_FILES_MADE=$(ls -l ${BACKUP_FOLDERNAME}*.tar.bz2|wc -l)
BACKUP_FILES_MADE=$(( $BACKUP_FILES_MADE - 0 ))
    
echo
echo "[+] There are ${BACKUP_FILES_MADE} backup files actually."

if [ $BACKUP_FILES_MADE -gt $MAXIMUM_BACKUP_FILES ];then
    REMOVE_FILES=$(( $BACKUP_FILES_MADE - $MAXIMUM_BACKUP_FILES ))
echo "[+] Remove ${REMOVE_FILES} old backup files."
    ALL_BACKUP_FILES=($(ls -t ${BACKUP_FOLDERNAME}*.tar.bz2))
    SAFE_BACKUP_FILES=("${ALL_BACKUP_FILES[@]:0:${MAXIMUM_BACKUP_FILES}}")
echo "[+] Safeting the newest backup files and removeing old files..."
    FOLDER_SAFETY="_safety"
if [ ! -d $FOLDER_SAFETY ]
then mkdir $FOLDER_SAFETY
fi

for FILE in ${SAFE_BACKUP_FILES[@]};do
    mv -i ${FILE}    ${FOLDER_SAFETY}
done
    rm -rf ${BACKUP_FOLDERNAME}*.tar.bz2
    mv -i ${FOLDER_SAFETY}/* ./
    rm -rf ${FOLDER_SAFETY}

CHAR=''
for ((i=0;$i<=100;i+=2))
do printf "Removing:[%-50s]%d%%\r" $CHAR $i
    sleep 0.1
CHAR=#$CHAR
done
    echo
fi


大家在没有好的备份方案时,可以用该备份脚本,脚本测试备份多个数据库时,存在只备份一个数据库的问题,或者tar打包时,选用zcf参数打包,出现备份打包后的数据只有4kb,有解决办法的朋友可以留言!