【mysql】Linux下定时备份数据库脚本

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 ==========================================
posted @ 2023-03-03 17:29  中国制造  阅读(22)  评论(0编辑  收藏  举报