Last active
October 16, 2016 05:10
-
-
Save NewFuture/fb6963fa69c89ceb8d7c678e0045c00b to your computer and use it in GitHub Desktop.
mysql backup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
MAXIMUM_BACKUP_FILES=10 #最大备份文件数 | |
BACKUP_FOLDERNAME="/var/db/backup/" #数据库备份文件的主目录 | |
DB_HOSTNAME="localhost" #mysql所在主机的主机名 | |
DB_USERNAME="backupaccount" #mysql登录用户名 | |
DB_PASSWORD="backuppassword" #mysql登录密码 | |
DATABASES=( | |
"dbname" #备份的数据库名 | |
) | |
#========= | |
echo "Bash Database Backup Tool" | |
CURRENT_DATE=$(date +%F) #定义当前日期为变量 | |
TMP_FOLDER="$BACKUP_FOLDERNAME/${CURRENT_DATE}" #存放数据库备份文件的目录 | |
mkdir -p "$TMP_FOLDER" #创建数据库备份文件目录 | |
cd "$BACKUP_FOLDERNAME" | |
#统计需要被备份的数据库 | |
count=0 | |
while [ "x${DATABASES[count]}" != "x" ];do | |
count=$(( count + 1 )) | |
done | |
echo "[+] ${count} databases will be backuped..." | |
#循环这个数据库名称列表然后逐个备份这些数据库 | |
for DATABASE in ${DATABASES[@]};do | |
echo "[+] Mysql-Dumping: ${DATABASE}" | |
echo -n " Began: ";echo $(date) | |
if $(mysqldump -h ${DB_HOSTNAME} -u${DB_USERNAME} -p${DB_PASSWORD} ${DATABASE} > "${TMP_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 "${TMP_FOLDER}" | bzip2 >"${BACKUP_FOLDERNAME}/${CURRENT_DATE}.tar.bz2" && rm -rf "$TMP_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 removing old files..." | |
FOLDER_SAFETY="${BACKUP_FOLDERNAME}_safety_{$CURRENT_DATE}" | |
if [ ! -d "$FOLDER_SAFETY" ];then | |
mkdir "$FOLDER_SAFETY" | |
fi; | |
for FILE in ${SAFE_BACKUP_FILES[@]};do | |
echo $FILE | |
mv -i "${FILE}" "${FOLDER_SAFETY}" | |
done | |
rm -rf ${BACKUP_FOLDERNAME}*.tar.bz2 | |
mv -i ${FOLDER_SAFETY}/* ${BACKUP_FOLDERNAME} | |
rm -rf ${FOLDER_SAFETY} | |
fi; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 3 * * * root /root/backup.sh >> /var/log/mysql_backup.log |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.