當數據庫某張數據量非常大的表進行其他操作,需要先進行導出時;
先用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 & 讓腳本在后臺運行。