首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 遠程數據庫一鍵導入本地:mysqldump 管道流式傳輸實戰

     編輯:MySQL 綜合教學

MySQL 遠程數據庫一鍵導入本地:mysqldump 管道流式傳輸實戰

避免中間落地文件,利用管道將 mysqldump 輸出直接導入本地 MySQL,支援壓縮、跳過鎖表、大數據集高效遷移。

核心命令

mysqldump -h '114.212.111.123' -uROSE -pxxxooo \
  --opt --compress --skip-lock-tables ITSM \
| mysql -h localhost -uroot -proot ITSMC

參數詳細解析

生產環境增強版

# 遠程備份並同步導入(含事務一致性、壓縮、進度顯示)
mysqldump -h 'remote-host' -u'user' -p'pass' \
  --single-transaction --quick --compress \
  --default-character-set=utf8mb4 \
  --skip-lock-tables --skip-add-locks \
  --hex-blob --routines --triggers \
  --databases db1 db2 \
| pv -N "Import" \
| mysql -h localhost -u'root' -p'pass' \
  --default-character-set=utf8mb4 \
  --force target_db

# pv (Pipe Viewer) 顯示傳輸進度、速度、ETA
# --force 忽略部分錯誤繼續執行
# --hex-blob 二進制數據十六進制導出,避免編碼問題

常見問題與解決

參數說明建議
-h遠程/本地主機 IP 或域名遠程用公網/內網 IP,本地用 localhost
-u用戶名(緊跟無空格)-uROSE
-p密碼(緊跟無空格,生產環境建議配置文件)-pxxxooo
--opt啟用優化組合:--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset默認開啟,可省略
--compress客戶端/服務端壓縮傳輸,節省帶寬跨公網/低帶寬必加
--skip-lock-tables不鎖表(配合 --single-transaction 實現一致性備份)InnoDB 必加,避免阻塞寫入
--single-transaction啟動事務一致性備份(需 InnoDB)生產環境必加,替代 --lock-tables
--quick / -q逐行讀取不緩存,大表必加默認開啟
--no-data / -d僅導出結構按需使用
--no-create-info / -t僅導出數據按需使用
問題原因解決
ERROR 2013: Lost connection大表傳輸超時增加 net_read_timeout/net_write_timeout;分表導出
ERROR 1153: Packet too large單行/單包超過 max_allowed_packet兩端同步調大:SET GLOBAL max_allowed_packet=1G
字符集亂碼兩端字符集不一致指定 --default-character-set=utf8mb4;目標庫預設 utf8mb4
外鍵約束報錯導入順序導致父表未建加 --skip-lock-tables;或先導結構後導數據;或臨時關閉 FOREIGN_KEY_CHECKS=0
GTID/複製報錯備份含 GTID 資訊導入非主庫加 --set-gtid-purged=OFF

大數據集分表導出腳本

<?bash
# 導出單表,避免單一巨大流
TABLES=$(mysql -h remote -u user -ppass -N -e "SHOW TABLES FROM dbname")
for TABLE in $TABLES; do
    echo "Exporting $TABLE..."
    mysqldump -h remote -u user -ppass \
        --single-transaction --quick --compress \
        dbname $TABLE \
    | mysql -h localhost -u root -ppass dbname
done
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved