如何编写单独备份指定数据表脚本

wen 实用脚本 32

本文目录导读:

如何编写单独备份指定数据表脚本

  1. MySQL 备份指定表
  2. PostgreSQL 备份指定表
  3. SQL Server 备份指定表
  4. 通用结构化备份脚本
  5. 使用方式
  6. 注意事项

MySQL 备份指定表

基础备份脚本

#!/bin/bash
# MySQL 配置
DB_HOST="localhost"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="your_database"
TABLE_NAME="your_table"
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份指定表
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME $TABLE_NAME > $BACKUP_DIR/${TABLE_NAME}_${DATE}.sql
echo "表 $TABLE_NAME 已备份到 $BACKUP_DIR/${TABLE_NAME}_${DATE}.sql"

增强版备份脚本(包含压缩和清理)

#!/bin/bash
# 配置参数
DB_HOST="localhost"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="your_database"
TABLES=("users" "orders" "products")  # 指定多个表
BACKUP_DIR="/data/backup/mysql"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份多个指定表
for TABLE in "${TABLES[@]}"; do
    echo "开始备份表: $TABLE"
    # 备份单个表
    mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS \
        --single-transaction \
        --routines \
        --triggers \
        $DB_NAME $TABLE | gzip > ${BACKUP_DIR}/${TABLE}_${DATE}.sql.gz
    if [ $? -eq 0 ]; then
        echo "✅ 表 $TABLE 备份成功: ${TABLE}_${DATE}.sql.gz"
    else
        echo "❌ 表 $TABLE 备份失败"
    fi
done
# 清理过期备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "已清理超过 $RETENTION_DAYS 天的旧备份"

PostgreSQL 备份指定表

#!/bin/bash
# PostgreSQL 配置
PG_HOST="localhost"
PG_PORT="5432"
PG_USER="postgres"
PG_PASS="your_password"
DB_NAME="your_database"
TABLE_NAME="your_table"
BACKUP_DIR="/data/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
# 设置密码
export PGPASSWORD=$PG_PASS
# 备份指定表
pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER \
    -t $TABLE_NAME \
    -F c \
    $DB_NAME > ${BACKUP_DIR}/${TABLE_NAME}_${DATE}.dump
echo "表 $TABLE_NAME 已备份到 ${BACKUP_DIR}/${TABLE_NAME}_${DATE}.dump"
# 取消密码变量
unset PGPASSWORD

SQL Server 备份指定表

#!/bin/bash
# SQL Server 配置
SERVER="localhost"
DATABASE="your_database"
USERNAME="sa"
PASSWORD="your_password"
TABLE_NAME="your_table"
BACKUP_DIR="/data/backup/mssql"
DATE=$(date +%Y%m%d_%H%M%S)
# 使用 bcp 工具导出表数据
bcp "$DATABASE.dbo.$TABLE_NAME" out "${BACKUP_DIR}/${TABLE_NAME}_${DATE}.csv" \
    -S $SERVER -U $USERNAME -P $PASSWORD -c -t"," -T
echo "表 $TABLE_NAME 已导出到 ${BACKUP_DIR}/${TABLE_NAME}_${DATE}.csv"

通用结构化备份脚本

#!/bin/bash
# ================== 配置区域 ==================
# 数据库类型:mysql/postgres/mssql
DB_TYPE="mysql"
# 数据库连接信息
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="your_database"
# 要备份的表(空格分隔)
TABLES=("table1" "table2" "table3")
# 备份设置
BACKUP_DIR="/data/backup/database"
RETENTION_DAYS=30
COMPRESS=true
# ================== 备份逻辑 ==================
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
backup_table() {
    local TABLE=$1
    local BACKUP_FILE="${BACKUP_DIR}/${TABLE}_${DATE}"
    echo "开始备份表: $TABLE"
    case $DB_TYPE in
        mysql)
            mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS \
                --single-transaction \
                $DB_NAME $TABLE > ${BACKUP_FILE}.sql
            ;;
        postgres)
            export PGPASSWORD=$DB_PASS
            pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER \
                -t $TABLE $DB_NAME > ${BACKUP_FILE}.sql
            unset PGPASSWORD
            ;;
        mssql)
            bcp "$DB_NAME.dbo.$TABLE" out "${BACKUP_FILE}.csv" \
                -S $DB_HOST -U $DB_USER -P $DB_PASS -c -t","
            ;;
        *)
            echo "不支持的数据库类型: $DB_TYPE"
            return 1
            ;;
    esac
    # 压缩备份
    if [ "$COMPRESS" = true ] && [ -f "${BACKUP_FILE}.sql" ]; then
        gzip -f ${BACKUP_FILE}.sql
        BACKUP_FILE="${BACKUP_FILE}.sql.gz"
    fi
    echo "✅ 表 $TABLE 备份完成: $BACKUP_FILE"
}
# 备份所有指定表
for TABLE in "${TABLES[@]}"; do
    backup_table $TABLE
done
# 清理过期备份
find $BACKUP_DIR -type f -mtime +$RETENTION_DAYS -delete
echo "🎉 备份完成,已清理超过 $RETENTION_DAYS 天的旧备份"

使用方式

设置执行权限

chmod +x backup_tables.sh

传递参数执行

# 直接运行
./backup_tables.sh
# 或使用参数
DB_HOST="192.168.1.100" DB_NAME="mydb" TABLES=("users" "orders") ./backup_tables.sh

添加到 crontab 定时执行

# 每天凌晨2点备份
0 2 * * * /path/to/backup_tables.sh >> /var/log/backup.log 2>&1

注意事项

  1. 密码安全:建议使用配置文件或环境变量,避免明文密码
  2. 权限设置:确保备份目录有足够的磁盘空间
  3. 备份验证:定期检查备份文件完整性
  4. 监控告警:添加失败通知机制
  5. 测试恢复:定期测试备份恢复流程

选择适合您需求的版本,根据实际情况调整配置即可。

抱歉,评论功能暂时关闭!