本脚本支持参数化配置数据库连接信息、备份存储路径及过期文件清理策略,实现以下核心功能:
mysqldump
导出数据库并压缩存储。#!/bin/bash
# 自动化数据库备份脚本 v1.0
# 最后更新:2025-04-17
############################
### 参数配置区(支持命令行覆盖)###
############################
# 默认配置
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="root"
DB_PASSWORD="123456"
DB_NAME="production_db"
BACKUP_DIR="/data/backups"
RETENTION_DAYS=7
LOG_FILE="/var/log/db_backup.log"
########################
### 函数定义区 ###
########################
# 日志记录函数
log() {
local timestamp=$(date"+%Y-%m-%d %H:%M:%S")
echo"[${timestamp}] $1" | tee -a ${LOG_FILE}
}
# 参数解析函数
parse_args() {
whilegetopts"h:P:u:p:d:r:l:" opt; do
case$optin
h) DB_HOST="$OPTARG" ;;
P) DB_PORT="$OPTARG" ;;
u) DB_USER="$OPTARG" ;;
p) DB_PASSWORD="$OPTARG" ;;
d) DB_NAME="$OPTARG" ;;
r) RETENTION_DAYS="$OPTARG" ;;
l) BACKUP_DIR="$OPTARG" ;;
*) echo"用法: $0 [-h 主机] [-P 端口] [-u 用户] [-p 密码] [-d 数据库] [-r 保留天数] [-l 备份路径]" >&2
exit 1 ;;
esac
done
}
# 备份执行函数
perform_backup() {
local timestamp=$(date"+%Y%m%d_%H%M%S")
local backup_file="${BACKUP_DIR}/${DB_NAME}_full_${timestamp}.sql.gz"
log"开始备份数据库: ${DB_NAME}"
mysqldump -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} \
--single-transaction --routines --triggers ${DB_NAME} | gzip > ${backup_file}
if [ $? -eq 0 ]; then
log"备份成功 ➜ ${backup_file}"
else
log"备份失败! 错误码: $?"
exit 1
fi
}
# 清理旧备份函数
clean_old_backups() {
log"清理过期备份(保留天数: ${RETENTION_DAYS})"
find ${BACKUP_DIR} -name "${DB_NAME}_full_*.sql.gz" -mtime +${RETENTION_DAYS} -execrm -fv {} \; | tee -a ${LOG_FILE}
}
######################
### 主程序流程 ###
######################
main() {
parse_args "$@"
mkdir -p ${BACKUP_DIR}
perform_backup
clean_old_backups
log"备份任务完成"
}
main "$@"
./backup.sh -h 192.168.1.100 -u admin -p securepass -d order_db -r 30 -l /mnt/backups
DB_HOST
等默认值gzip
压缩节省存储空间(压缩率可达70%+)--single-transaction
确保事务一致性triggers
和routines
等元数据 [2025-04-17 02:30:01] 开始备份数据库: production_db
[2025-04-17 02:32:45] 备份成功 ➜ /data/backups/production_db_full_20250417_023001.sql.gz
chmod 700 /data/backups
chmod 600 /var/log/db_backup.log
# 确保安装MySQL客户端工具
sudo apt-get install mysql-client coreutils -y # Debian/Ubuntu
sudo yum install mysql-community-client coreutils -y # CentOS/RHEL
# 每日凌晨2点执行
(crontab -l ; echo "0 2 * * * /usr/local/bin/backup.sh -p $(cat /etc/db_pass.txt)") | crontab -
建议将密码存储在加密文件(如/etc/db_pass.txt
)并通过chmod 400
设置权限
《Ansible自动化部署MySQL集群实战》
错误现象 | 可能原因 | 解决方案 |
---|---|---|
备份文件为空 | 数据库连接失败 | 检查防火墙规则及权限 |
权限被拒绝 | 备份目录权限不足 | 执行chown -R mysql:mysql ${BACKUP_DIR} |
日志无记录 | 日志路径不可写 | 创建日志目录并赋权:mkdir -p /var/log && chmod 755 /var/log |
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有