mysql_full_bak.sh
#!/bin/bash
# 全量备份(建议一周一次)
# 时间参数
DATE=$(date +%Y-%m-%d)
DATETIME=$(date +%Y%m%d%H%M%S)
# 数据库的地址
HOST=localhost
# 数据库的用户名
DB_USER=root
# 数据库的密码
DB_PASSWD=passwd
# 备份目录
DIR=/home/mysqlbak
BACKUP_DIR=${DIR}/${DATE}
# 备份的数据库名称(数据库名之间用空格分开)
DATABASE_ARR=(database1 database2 database3)
# 日志前缀打印
LOG_PREFIX="$(date +"%Y-%m-%d %H:%M:%S")-$(whoami) :"
echo -e ${LOG_PREFIX} =============== backup start ==========================================
echo -e ${LOG_PREFIX} backup dir - ${BACKUP_DIR}
echo -e ${LOG_PREFIX} backup databases - ${DATABASE_ARR[@]}
#创建备份目录 如果不存在就创建
[ ! -d "${BACKUP_DIR}" ] && mkdir -p "${BACKUP_DIR}"
# 定义sql文件名数组
FILE_ARR=()
# 备份每个库的数据
for item in ${DATABASE_ARR[@]}; do
file_name=${DATETIME}-full-${item}.sql
FILE_ARR+=(${file_name})
mysqldump -u${DB_USER} -p${DB_PASSWD} --host=${HOST} -q -R --databases ${item} > ${BACKUP_DIR}/${file_name}
done
# 将文件处理成 tar.gz
# 同时删除源文件
cd ${BACKUP_DIR}
for item in ${FILE_ARR[@]}; do
tar -zcvf ${item}.tar.gz ${item}
# 删除对应的备份文件,保留压缩文件
rm -rf ${BACKUP_DIR}/${item}
done
# 删除10天前的备份文件(find命令的-mtime +10有玄妙哦,准确来说是11天前的)
# find ${DIR} -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
find ${DIR} -type d -mtime +10 |xargs rm -r
echo -e ${LOG_PREFIX} =============== backup done ==========================================