当数据库某张数据量非常大的表进行其他操作,需要先进行导出时;
先用linux进入操作环境,
1.添加一个export_mysql_batches.sh脚本文件,
#!/bin/bash# 数据库连接配置
DB_HOST="36.33.0.138:3306"
DB_USER="devuser"
DB_PASS="rntec@mes1"
DB_NAME="rntec"
TABLE="prod_line_oper_log_history"# 分批设置
BATCH_SIZE=100000
OUTPUT_DIR="/home/output" # 设置输出目录# 创建输出目录
mkdir -p "$OUTPUT_DIR"# 获取总行数
TOTAL_ROWS=$(mysql -h$DB_HOST -u$DB_USER -p$DB_PASS -e "SELECT COUNT(*) FROM $DB_NAME.$TABLE" -s)# 计算总批次数
BATCHES=$(( ($TOTAL_ROWS + $BATCH_SIZE - 1) / $BATCH_SIZE ))# 记录开始时间
START_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo "[$START_TIME] 开始导出 $TABLE 表数据,共 $TOTAL_ROWS 行,分 $BATCHES 批导出..."# 循环分批导出
for (( i=0; i<$BATCHES; i++ ))
doCURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")OFFSET=$(( $i * $BATCH_SIZE ))OUTPUT_FILE="$OUTPUT_DIR/${TABLE}_batch_$(printf "%04d" $i).sql"echo "[$CURRENT_TIME] 正在导出第 $((i+1))/$BATCHES 批 (OFFSET $OFFSET)..."mysqldump -h$DB_HOST -u$DB_USER -p$DB_PASS \--no-create-info \--no-tablespaces \--skip-triggers \--compact \--where="1 LIMIT $BATCH_SIZE OFFSET $OFFSET" \$DB_NAME $TABLE > "$OUTPUT_FILE"# 检查文件是否生成成功if [ -s "$OUTPUT_FILE" ]; thenecho "成功导出到 $OUTPUT_FILE"elseecho "警告: $OUTPUT_FILE 为空或未创建"fi
done# 记录结束时间
END_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo "[$END_TIME] 所有批次导出完成!文件保存在 $OUTPUT_DIR"
2.修改数据库连接参数和表名;
3.给脚本执行权限:chmod +x export_mysql_batches.sh;
4.使用 nohup ./export_mysql_batches.sh & 让脚本在后台运行。