在 MySQL 中導入 SQL 文件是常見的操作,主要有兩種常用方法,適用于不同場景:
適合在終端直接操作,無需先登錄 MySQL,尤其適合導入較大的 SQL 文件。
-
確保目標數(shù)據(jù)庫存在(如果 SQL 文件已包含建庫語句,可跳過此步):
mysql -u 用戶名 -p
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4;
exit;
-
執(zhí)行導入命令:
mysql -u 用戶名 -p 目標數(shù)據(jù)庫名 < /path/to/your/file.sql
-
示例:導入
/home/backup/db_backup.sql到mydb數(shù)據(jù)庫
mysql -u root -p mydb < /home/backup/db_backup.sql
-
輸入密碼后開始導入,完成后會自動返回終端(無進度提示,需耐心等待)。
適合已登錄 MySQL 客戶端的情況,會顯示執(zhí)行過程日志。
-
登錄 MySQL 并切換到目標數(shù)據(jù)庫:
mysql -u 用戶名 -p
USE 目標數(shù)據(jù)庫名;
-
執(zhí)行 source 命令導入:
-
示例:
source /home/backup/db_backup.sql;
-
注意:必須使用絕對路徑,且文件路徑中不能有空格(有空格需用引號包裹)。
-
導入大文件超時:編輯 MySQL 配置文件(my.cnf或mysqld.cnf),增加以下配置后重啟服務:
[mysqld]
max_allowed_packet=200M # 允許的最大數(shù)據(jù)包大小
wait_timeout=600 # 連接超時時間(秒)
-
中文亂碼問題:導入時指定字符集:
mysql -u root -p --default-character-set=utf8mb4 mydb < backup.sql
-
權限錯誤:確保當前用戶有目標數(shù)據(jù)庫的寫入權限:
GRANT ALL PRIVILEGES ON 目標數(shù)據(jù)庫名.* TO '用戶名'@'localhost';
FLUSH PRIVILEGES;
-
SQL 文件過大無法導入:
-
可將文件分割為多個小文件(如用
split命令)
-
或使用工具如
mysqldump的擴展參數(shù)優(yōu)化導入速度。
-
導入前建議備份目標數(shù)據(jù)庫,避免數(shù)據(jù)覆蓋
-
確保 SQL 文件路徑正確,且 MySQL 進程有讀取該文件的權限
-
導入包含
CREATE DATABASE語句的 SQL 文件時,無需指定數(shù)據(jù)庫名,直接執(zhí)行:
mysql -u root -p < backup.sql
根據(jù) SQL 文件大小和操作習慣選擇合適的方法,兩種方式都能高效完成導入操作。