首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysqldump 跨服務器實時同步腳本:源庫導出 -> 目標庫導入一體化

     編輯:MySQL 資料庫相關知識

場景:雙機房主備同步、測試環境數據刷新、異構遷移驗證。本文提供 **Shell 管道直連** 腳本,無中間文件落盤,延遲最低、佔用最小。

核心腳本

#!/bin/bash
# sync_mysql.sh - 源庫導出並直接導入目標庫
set -euo pipefail

# ==== 源庫配置 ====
SRC_USER="root"
SRC_HOST="10.10.10.12"
SRC_PASS="******"
SRC_DB="STATION"

# ==== 目標庫配置 ====
DST_USER="root"
DST_HOST="10.10.10.22"
DST_PASS="******"
DST_DB="STATION"

# ==== 同步表列表 (空格分隔) ====
TABLES="username files"

# ==== 執行同步 ====
for TBL in ${TABLES}; do
  echo "[$(date)] Syncing ${TBL} ..."
  mysqldump --add-drop-table --opt \
    -u"${SRC_USER}" -h"${SRC_HOST}" -p"${SRC_PASS}" \
    "${SRC_DB}" "${TBL}" | \
  mysql -u"${DST_USER}" -h"${DST_HOST}" -p"${DST_PASS}" "${DST_DB}"
  
  if [[ ${PIPESTATUS[0]} -eq 0 && ${PIPESTATUS[1]} -eq 0 ]]; then
    echo "[$(date)] ${TBL} sync OK"
  else
    echo "[$(date)] ${TBL} sync FAILED" >&2
    exit 1
  fi
done

echo "[$(date)] All tables synced successfully."

關鍵參數說明

  • --add-drop-table:目標庫表存在時先 DROP,保冪等性。
  • --opt:包含 --quick --add-locks --extended-insert --lock-tables,平衡速度與一致性。
  • 管道直連:mysqldump ... | mysql ...,**無臨時文件、無磁盤 I/O、內存流式處理**,適合千萬行級表。
  • PIPESTATUS 數組檢查管道雙端退出碼,確保導出導入均成功。

進階增強

需求實現
大表分批同步mysqldump --where="id BETWEEN 1 AND 100000" 循環分片
排除某些表--ignore-table=db.tbl (mysqldump 5.5+)
異構同步 (MySQL->PostgreSQL)中間轉 CSV/Parquet,或用 pgloader / Debezium CDC
斷點續傳記錄同步位點 (主鍵/時間戳),下次從斷點續傳
並發同步多表xargs -P 4 -I {} sh -c 'sync_one_table {}' 控制並發度

生產環境替代方案對比

方案延遲一致性維護成本適用場景
mysqldump 管道分鐘級最終一致性低小表、定時刷新、遷移驗證
MySQL 原生複製亞秒級最終/半同步/全同步中核心業務 HA、讀寫分離
GTID 複製 + 從庫提升秒級強一致性 (可配置)中高金融核心、跨機房災備
CDC (Debezium/Maxwell)毫秒級最終一致性高實時數倉、微服務事件驅動
XtraBackup 物理備份恢復小時級 (TB級)崩潰一致性中超大庫初始化、災難恢復演練

總結

  1. **腳本同步** 適合「按需、定時、小規模、異構」場景,實現成本最低。
  2. **核心業務實時同步必上原生複製/GTID/CDC**,腳本僅作輔助/驗證/補數。
  3. 管道直連 + PIPESTATUS 檢查是 Shell 同步腳本的**專業寫法**,拒絕落盤中轉。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved