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

MySQL 命令行導入 SQL 文件完整指南:Source、管道重定向、編碼設置、遠程導入

     編輯:MySQL 資料庫相關知識

SQL 文件導入是遷移、恢復、初始化的高頻動作。本文匯總 source、管道重定向、編碼控制、遠程導入、大文件優化等全場景實戰技巧,避開亂碼、卡頓、權限不足等常見坑。

一、 進入 MySQL 客戶端

# 本地 Socket (最快)
mysql -u root -p -S /var/lib/mysql/mysql.sock

# 遠程 TCP
mysql -h 10.0.1.50 -u root -p -P 3306

# 指定默認庫 (可省略 USE db)
mysql -u root -p db_name

二、 方式一:source 命令 (交互式、可見進度)

mysql> USE target_db;
mysql> SET NAMES utf8mb4;          -- 關鍵:設置連接字符集,防亂碼
mysql> SOURCE /full/path/dump.sql;
  • 路徑必須 絕對路徑,支持 Tab 補全。
  • 文件需可被 mysqld 進程用戶讀取 (權限 644+)。
  • 大文件執行期間可 Ctrl+C 中斷,但已執行部分不可回滾 (除非文件含事務)。

三、 方式二:管道重定向 (非交互、腳本友好、性能更強)

# 基礎
mysql -u root -p db_name < dump.sql

# 遠程導入 (壓縮傳輸)
mysql -h 10.0.1.50 -u root -p --compress db_name < dump.sql

# 顯式指定字符集 (防亂碼核心)
mysql -u root -p --default-character-set=utf8mb4 db_name < dump.sql
  • 不要用 SET CHARACTER SET utf8,必須用 SET NAMES utf8mb4 或 --default-character-set。
  • 管道模式下 SOURCE 不可用,但可在 SQL 文件頭部加 SET NAMES utf8mb4;。

四、 方式三:系統級直接導入 (無需進入客戶端,適合自動化)

# Linux
cd /usr/local/mysql/bin
./mysql -u root -p db_name < /backup/dump.sql

# Windows (進入 bin 目錄)
mysql -u root -p db_name < D:\backup\dump.sql

五、 大文件導入優化 (GB 級)

  1. 關閉自動提交 + 批量提交: SQL 文件頭尾包裹 SET AUTOCOMMIT=0; ... COMMIT;。
  2. 關閉唯一檢查/外鍵檢查: SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0; 導入後恢復。
  3. 調大緩衝: 臨時調大 innodb_buffer_pool_size、innodb_log_file_size。
  4. 分片導入: 用 split -l 100000 dump.sql part_ 拆分,分批導入,便於斷點續傳。
  5. 使用 pv 顯示進度: pv dump.sql | mysql -u root -p db_name。

六、 常見錯誤與排查

錯誤現象原因解決
中文亂碼連接字符集非 utf8mb4導入前 SET NAMES utf8mb4 或 --default-character-set=utf8mb4
ERROR 2006 (MySQL server has gone away)包過大 / 超時增大 max_allowed_packet (如 256M)、wait_timeout
Access denied權限不足授予 CREATE, DROP, INDEX, ALTER, INSERT, UPDATE, DELETE, SELECT, LOCK TABLES
Unknown database目標庫不存在先 CREATE DATABASE db_name CHARSET utf8mb4;
文件讀取權限拒絕mysqld 用戶無讀權限chmod 644 dump.sql 或放入 mysqld 可讀目錄

七、 遠程導入最佳實踐

# 應用服推送 (推薦,避免數據經由跳板機)
pv dump.sql | ssh db_server "mysql -u root -p --default-character-set=utf8mb4 db_name"

# 或 db_server 拉取 (需應用服開 rsync/HTTP)
mysql -h app_server -u root -p --default-character-set=utf8mb4 db_name < /remote/path/dump.sql

八、 總結

導入三板斧:1. 字符集對齊 (utf8mb4) 2. 選對方式 (source 交互 / 管道腳本 / 遠程 SSH) 3. 大文件優化 (關檢查、分片、進度條)。將導入命令封裝為標準化腳本 (參數化 DB/路徑/編碼),納入發布/遷移流水線,實現「零手工、可審計、可重試」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved