章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • python

  • shell

    • 进程pid判断脚本
    • 日志切割脚本
    • 设置跳板机脚本
    • 编写启动、停止、重启的脚本
    • mysql数据库备份的三种方式
    • jenkins编译服务脚本
    • app编译脚本
    • 常用shell脚本
    • 字符串的截取拼接
    • shell基础
    • centos7主机安全检测脚本和初始化脚本
    • 应用服务重启脚本
    • shell重启python程序脚本
    • rancher的证书制作脚本
    • shell常用脚本集合
    • mysql常用的脚本集合
    • shell批量部署安装包并启动
    • 批量添加定时任务
    • mysql备份企业示例
    • shell脚本创建出色用户体验的6种技巧
    • 多系统一键部署zabbix6脚本(已验证)
    • 批量拿取多台服务器的日志文件
    • shell脚本模块集合
    • 测试和生产脚本样例参考
      • 测试环境导出批量表
      • 生产环境导出批量表
  • go

  • 编程
  • shell
章工运维
2025-05-27
目录

测试和生产脚本样例参考

# 脚本样例

# 测试环境导出批量表

#!/bin/bash

# MySQL 连接配置
MYSQL_USER="your_username"
MYSQL_PASSWORD="your_password"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"

# 需要导出的表
TABLES=(
    "c_aa"
    "c_bb"
    "c_cc"
    "c_dd"
)

# 输出目录
OUTPUT_DIR="./mysql_exports"
mkdir -p "$OUTPUT_DIR"

# 获取所有以 ga 开头的数据库名
DBS=$(mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -h"$MYSQL_HOST" -P"$MYSQL_PORT" -e "SHOW DATABASES LIKE 'ga%';" -s --skip-column-names)

# 遍历每个数据库
for DB in $DBS; do
    echo "导出数据库:$DB"
    DB_OUTPUT_DIR="$OUTPUT_DIR/$DB"
    mkdir -p "$DB_OUTPUT_DIR"

    for TABLE in "${TABLES[@]}"; do
        echo "  导出表:$TABLE"
        mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -h"$MYSQL_HOST" -P"$MYSQL_PORT" "$DB" "$TABLE" > "$DB_OUTPUT_DIR/${TABLE}.sql"
    done
done

echo "导出完成。文件保存于 $OUTPUT_DIR"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 生产环境导出批量表

#!/bin/bash

# MySQL数据库批量导出脚本
# 用于导出ga开头数据库中指定表的数据和结构

# 配置区域 - 请根据实际情况修改
MYSQL_USER="your_username"
MYSQL_PASSWORD="your_password"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"

# 数据库服务器列表 - 请根据实际情况修改
DB_SERVERS=(
    "server1.example.com"
    "server2.example.com" 
    "server3.example.com"
)

# 需要导出的表列表
TABLES=(
    "c_aa"
    "c_bb"
    "c_cc"
    "c_dd"
)

# 输出目录
OUTPUT_DIR="./mysql_exports"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

# 创建输出目录
mkdir -p "$OUTPUT_DIR"

# 日志文件
LOG_FILE="$OUTPUT_DIR/export_log_$TIMESTAMP.txt"

# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 检查mysqldump命令是否存在
check_mysqldump() {
    if ! command -v mysqldump &> /dev/null; then
        log "错误: mysqldump命令未找到,请安装MySQL客户端工具"
        exit 1
    fi
}

# 获取ga开头的数据库列表
get_ga_databases() {
    local host=$1
    mysql -h "$host" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
        -e "SHOW DATABASES LIKE 'ga%';" -s -N 2>/dev/null
}

# 检查表是否存在
table_exists() {
    local host=$1
    local database=$2
    local table=$3
    
    local count=$(mysql -h "$host" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
        -e "SELECT COUNT(*) FROM information_schema.tables 
            WHERE table_schema = '$database' AND table_name = '$table';" -s -N 2>/dev/null)
    
    [[ "$count" == "1" ]]
}

# 导出单个表
export_table() {
    local host=$1
    local database=$2
    local table=$3
    local output_file=$4
    
    log "导出表: $host -> $database.$table"
    
    # 导出表结构和数据
    mysqldump -h "$host" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
        --single-transaction \
        --routines \
        --triggers \
        --events \
        --add-drop-table \
        --create-options \
        --extended-insert \
        --quick \
        --lock-tables=false \
        "$database" "$table" > "$output_file" 2>/dev/null
    
    if [ $? -eq 0 ]; then
        local file_size=$(du -h "$output_file" | cut -f1)
        log "成功导出: $output_file (大小: $file_size)"
        return 0
    else
        log "导出失败: $host -> $database.$table"
        rm -f "$output_file"
        return 1
    fi
}

# 导出所有数据库的函数
export_all_databases() {
    local host=$1
    local host_clean=$(echo "$host" | sed 's/[^a-zA-Z0-9]/_/g')
    local host_dir="$OUTPUT_DIR/${host_clean}_$TIMESTAMP"
    
    mkdir -p "$host_dir"
    
    log "开始处理服务器: $host"
    
    # 测试连接
    if ! mysql -h "$host" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
         -e "SELECT 1;" &>/dev/null; then
        log "错误: 无法连接到数据库服务器 $host"
        return 1
    fi
    
    # 获取ga开头的数据库
    local databases=$(get_ga_databases "$host")
    
    if [ -z "$databases" ]; then
        log "警告: 在服务器 $host 上未找ga开头的数据库"
        return 0
    fi
    
    log "在服务器 $host 上找到的ga开头数据库: $(echo $databases | tr '\n' ' ')"
    
    local total_tables=0
    local exported_tables=0
    
    # 遍历每个数据库
    while IFS= read -r database; do
        [ -z "$database" ] && continue
        
        log "处理数据库: $database"
        local db_dir="$host_dir/$database"
        mkdir -p "$db_dir"
        
        # 遍历每个需要导出的表
        for table in "${TABLES[@]}"; do
            total_tables=$((total_tables + 1))
            
            if table_exists "$host" "$database" "$table"; then
                local output_file="$db_dir/${table}.sql"
                if export_table "$host" "$database" "$table" "$output_file"; then
                    exported_tables=$((exported_tables + 1))
                fi
            else
                log "跳过: 表 $database.$table 不存在"
            fi
        done
        
    done <<< "$databases"
    
    log "服务器 $host 处理完成: 成功导出 $exported_tables/$total_tables 个表"
}

# 主函数
main() {
    log "开始MySQL数据库批量导出任务"
    log "输出目录: $OUTPUT_DIR"
    log "时间戳: $TIMESTAMP"
    
    # 检查必要工具
    check_mysqldump
    
    # 检查配置
    if [ "$MYSQL_USER" == "your_username" ]; then
        log "错误: 请先修改脚本中的数据库连接配置"
        exit 1
    fi
    
    local total_servers=${#DB_SERVERS[@]}
    local processed_servers=0
    
    # 处理每个数据库服务器
    for server in "${DB_SERVERS[@]}"; do
        export_all_databases "$server"
        processed_servers=$((processed_servers + 1))
        log "进度: $processed_servers/$total_servers 服务器已处理"
        echo
    done
    
    log "所有导出任务完成!"
    log "导出文件位置: $OUTPUT_DIR"
    log "日志文件: $LOG_FILE"
    
    # 显示导出文件统计
    local total_files=$(find "$OUTPUT_DIR" -name "*.sql" | wc -l)
    local total_size=$(du -sh "$OUTPUT_DIR" 2>/dev/null | cut -f1)
    log "统计: 共导出 $total_files 个SQL文件,总大小: $total_size"
}

# 清理函数
cleanup() {
    log "脚本被中断,正在清理..."
    exit 1
}

# 设置中断处理
trap cleanup INT TERM

# 执行主函数
main "$@"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206

# 主要区别对比

特性 mysql_export_chatgpt.sh mysql_export_claude.sh
多服务器支持 ❌ 仅支持单台服务器(localhost) ✅ 支持多台数据库服务器
日志记录 ❌ 无日志功能 ✅ 有详细日志记录(含时间戳、输出文件大小等)
表存在性检查 ❌ 无(直接导出,表不存在会报错) ✅ 每个表都检查是否存在,避免错误
导出参数 基础导出,仅结构+数据 使用 --routines --triggers --events --quick 等,支持更多导出选项
错误处理 ❌ 无明确错误处理 ✅ 明确处理连接失败、导出失败等情况
输出组织 每个数据库一个目录 每个服务器+数据库为独立目录(含时间戳)
日志文件输出 ❌ 无 ✅ 有独立 .txt 日志文件
脚本健壮性 较基础,适合临时用 健壮、模块化,适合生产使用
中断处理 ❌ 无 ✅ 使用 trap 捕获 INT TERM 信号进行清理
微信 支付宝
上次更新: 2025/05/27, 16:35:40

← shell脚本模块集合 指针→

最近更新
01
个人开源项目推介平台汇总整理
06-27
02
英语学习技巧网站
06-27
03
5个开源流程图制作软件
06-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式