前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自动化备份脚本开发指南

自动化备份脚本开发指南

作者头像
IT咸鱼
发布于 2025-05-20 10:47:04
发布于 2025-05-20 10:47:04
10300
代码可运行
举报
运行总次数:0
代码可运行

一、脚本功能概述

本脚本支持参数化配置数据库连接信息、备份存储路径及过期文件清理策略,实现以下核心功能:

  1. 全量备份:通过mysqldump导出数据库并压缩存储。
  2. 过期清理:自动删除超过指定天数的历史备份。
  3. 日志记录:详细记录备份过程及异常信息。
  4. 参数化配置:支持命令行参数或配置文件动态调整设置。

二、脚本代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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 "$@"


三、关键功能说明

1. 参数化配置(支持两种方式)

  • 命令行参数覆盖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  ./backup.sh -h 192.168.1.100 -u admin -p securepass -d order_db -r 30 -l /mnt/backups

  • 直接修改脚本变量:修改DB_HOST等默认值

2. 备份策略优化

  • 采用gzip压缩节省存储空间(压缩率可达70%+)
  • 使用--single-transaction确保事务一致性
  • 保留triggersroutines等元数据

3. 日志管理

  • 实时输出+文件记录双模式
  • 包含时间戳、操作状态等关键信息
  • 示例日志:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  [2025-04-17 02:30:01] 开始备份数据库: production_db

  [2025-04-17 02:32:45] 备份成功 ➜ /data/backups/production_db_full_20250417_023001.sql.gz

4. 安全防护

  • 密码通过命令行传入,避免明文存储
  • 设置目录权限建议:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  chmod 700 /data/backups

  chmod 600 /var/log/db_backup.log


四、部署与使用

1. 安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 确保安装MySQL客户端工具

sudo apt-get install mysql-client coreutils -y  # Debian/Ubuntu

sudo yum install mysql-community-client coreutils -y  # CentOS/RHEL

2. 配置定时任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 每日凌晨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集群实战》

  • Playbook编写规范解析
  • 多节点主从复制配置
  • 安全加固最佳实践
  • 与备份脚本的集成方案
  • 滚动更新与回滚策略

六、排错指南

错误现象

可能原因

解决方案

备份文件为空

数据库连接失败

检查防火墙规则及权限

权限被拒绝

备份目录权限不足

执行chown -R mysql:mysql ${BACKUP_DIR}

日志无记录

日志路径不可写

创建日志目录并赋权:mkdir -p /var/log && chmod 755 /var/log


声明:本脚本已在CentOS 7/8、Ubuntu 20.04 LTS环境测试通过,建议生产环境部署前进行完整验证。如遇问题,请参考各Evidence文档中的解决方案 。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、脚本功能概述
    • 二、脚本代码实现
    • 三、关键功能说明
      • 1. 参数化配置(支持两种方式)
      • 2. 备份策略优化
      • 3. 日志管理
      • 4. 安全防护
    • 四、部署与使用
      • 1. 安装依赖
      • 2. 配置定时任务
    • 五、下篇内容预告
    • 六、排错指南
    • 声明:本脚本已在CentOS 7/8、Ubuntu 20.04 LTS环境测试通过,建议生产环境部署前进行完整验证。如遇问题,请参考各Evidence文档中的解决方案 。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档