You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两个TXT文件实现数据库循环备份脚本?

数据库与表组合备份的Bash脚本方案

核心嵌套循环脚本

以下是直接实现需求的脚本,能遍历DB_NAME.txt中的每个数据库和TB_NAME.txt中的每个表,完成两两组合的备份:

#!/bin/bash

# 指定两个文件的路径(根据实际位置调整)
DB_LIST="./DB_NAME.txt"
TB_LIST="./TB_NAME.txt"

# 先检查文件是否存在,避免后续报错
if [ ! -f "$DB_LIST" ] || [ ! -f "$TB_LIST" ]; then
    echo "错误:DB_NAME.txt 或 TB_NAME.txt 不存在,请确认文件路径"
    exit 1
fi

# 外层循环读取数据库名
while IFS= read -r db; do
    # 跳过空行和以#开头的注释行
    [[ -z "$db" || "$db" =~ ^# ]] && continue
    
    # 内层循环读取表名,与当前数据库组合备份
    while IFS= read -r tb; do
        [[ -z "$tb" || "$tb" =~ ^# ]] && continue
        
        # 生成带时间戳的备份文件名,避免覆盖
        backup_file="${db}_${tb}_$(date +%Y%m%d_%H%M%S).sql"
        
        # 执行mysqldump,替换为你的MySQL账号信息
        # 建议用~/.my.cnf存储密码,避免明文泄露
        mysqldump -u your_mysql_user -p'your_mysql_password' "$db" "$tb" > "$backup_file"
        
        # 检查备份是否成功
        if [ $? -eq 0 ]; then
            echo "✅ 备份完成:$backup_file"
        else
            echo "❌ 备份失败:$db.$tb"
            rm -f "$backup_file"  # 删除失败的空文件
        fi
    done < "$TB_LIST"
done < "$DB_LIST"

关键细节说明

  • IFS= read -r:确保读取行内容时不丢失空格、不转义特殊字符,适配带空格的库/表名
  • 跳过空行和注释:避免处理无效的行内容,提升脚本健壮性
  • 时间戳文件名:防止多次备份覆盖同一文件,方便追溯备份时间
  • 密码安全优化:不要在命令行明文写密码,推荐创建~/.my.cnf配置文件:
    [mysqldump]
    user=your_mysql_user
    password=your_mysql_password
    
    之后脚本中的mysqldump命令可简化为:mysqldump "$db" "$tb" > "$backup_file"

进阶优化:压缩备份

如果需要节省磁盘空间,可将备份文件压缩为gz格式:

mysqldump "$db" "$tb" | gzip > "${backup_file}.gz"

内容的提问来源于stack exchange,提问作者skidamarink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:47:17