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

MySQL命令行導出導入數據庫實操指南

     編輯:MySQL 綜合教學

MySQL命令行導出導入數據庫實操指南

mysqldump 與 source 是 MySQL 命令行備份恢復的核心工具組合,無需圖形化介面,適合腳本自動化、服務器無界面環境、大數據量操作。本文記錄標準操作流程、常用參數、大數據優化技巧及常見問題。

一、導出數據庫:mysqldump

1.1 基礎語法

mysqldump -u 用戶名 -p [選項] 數據庫名 [表名...] > 導出文件.sql

# 示例:導出整庫
mysqldump -u root -p mydb > mydb_full_$(date +%F).sql

# 示例:導出單表
mysqldump -u root -p mydb t_user > mydb_t_user.sql

# 示例:導出多表
mysqldump -u root -p mydb t_user t_order > mydb_two_tables.sql

1.2 核心參數詳解

參數作用推薦場景
--single-transaction啟動一致性快照 (InnoDB專用),無鎖導出生產環境必加,避免阻塞寫入
--routines導出存儲過程/函數完整備份必加
--triggers導出觸發器完整備份必加
--events導出定時事件完整備份必加
--master-data=2輸出 Binlog 位置 (註釋形式),用於主從搭建/增量恢復主庫備份建議加
--flush-logs導出前切換 Binlog配合增量備份
--where="condition"導出符合條件的數據分表/歸檔導出
--no-data僅導出結構 (DDL)結構遷移/對比
--no-create-info僅導出數據 (INSERT)數據遷移/合並
--compact精簡輸出 (禁用註釋、SET語句等)減小文件體積
--hex-blob二進制列用十六進制導出含 BLOB/BINARY/GEOMETRY 列必加
--default-character-set=utf8mb4指定連接字符集防止亂碼,強制指定

1.3 生產環境推薦命令模板

# 完整備份 (結構+數據+對象+Binlog位置)
mysqldump -u backup_user -p'xxx' \
  --single-transaction \
  --routines --triggers --events \
  --master-data=2 \
  --default-character-set=utf8mb4 \
  --hex-blob \
  mydb > mydb_full_$(date +%F_%H%M).sql

# 僅結構
mysqldump -u root -p --no-data --routines --triggers --events mydb > mydb_struct.sql

# 大表分批導出 (配合 where 條件)
mysqldump -u root -p --where="id BETWEEN 1 AND 100000" mydb big_table > big_table_part1.sql

二、導入數據庫:source / mysql 命令

2.1 方式一:mysql 客戶端管道導入 (推薦、非交互、適合腳本)

# 1. 創建目標庫 (若不存在)
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

# 2. 導入
mysql -u root -p --default-character-set=utf8mb4 mydb < mydb_full_20231001.sql

# 3. 驗證
mysql -u root -p -e "USE mydb; SHOW TABLES; SELECT COUNT(*) FROM t_user;"

2.2 方式二:交互模式 source 命令 (適合調試、分步執行)

mysql -u root -p
# 進入交互模式

CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE mydb;

SOURCE /path/to/mydb_full_20231001.sql;
# 執行完成顯示 Query OK 行數統計

2.3 導入常用優化參數

2.4 大數據導入優化腳本模板

#!/bin/bash
# import_large.sh
DB_USER="root"
DB_PASS="xxx"
DB_NAME="mydb"
SQL_FILE="mydb_full.sql"

mysql -u$DB_USER -p$DB_PASS -e "CREATE DATABASE IF NOT EXISTS $DB_NAME CHARACTER SET utf8mb4;"

mysql -u$DB_USER -p$DB_PASS $DB_NAME <

三、常見問題與解決

參數/設置作用適用場景
SET autocommit=0; + COMMIT;關閉自動提交,手動控制事務邊界大量 INSERT 導入,顯著提速
SET unique_checks=0; / SET foreign_key_checks=0;暫時關閉唯一/外鍵約束檢查大數據導入,導入後重新開啟驗證
SET sql_log_bin=0;當前會話不記錄 Binlog從庫導入/數據修復,避免 Binlog 膨脹
--force遇到錯誤繼續執行導入已知有髒數據的文件
問題原因解決
ERROR 1064: You have an error in your SQL syntax版本不兼容 (5.7導出到8.0/反向) / 保留字衝突加 --compatible=mysql40 / 目標版本安裝 mysql_upgrade / 手動修正 SQL
ERROR 1153: Got a packet bigger than 'max_allowed_packet'單條 INSERT 過大 (大字段/批量行)導入端臨時調大:SET GLOBAL max_allowed_packet=1073741824; (1GB)
ERROR 1213: Deadlock found when trying to get lock並發導入/約束檢查死鎖關閉 foreign_key_checks / 單線程導入
導入後中文亂碼字符集不匹配 (導出 latin1、導入 utf8mb4)導出導入雙端強制 --default-character-set=utf8mb4
Access denied for user 'root'@'localhost'權限不足/密碼錯誤確認用戶擁有目標庫 ALL PRIVILEGES
Unknown database 'mydb'目標庫不存在導入前先 CREATE DATABASE

四、進階:邏輯備份 vs 物理備份選型

維度mysqldump (邏輯備份)xtrabackup / 快照 (物理備份)
數據量適用< 50-100GB> 100GB、TB級
備份速度慢 (SQL解析、轉換、壓縮)極快 (文件級拷貝、流式傳輸)
恢復速度慢 (SQL重放、建索引)快 (文件拷貝+Redo應用)
跨版本/引擎遷移支持良好不支持 (需同版本、同引擎、同頁面大小)
一致性保證--single-transaction (InnoDB)原生支持、無鎖
工具成熟度官方內置、無依賴Percona xtrabackup (需安裝)

建議: 核心業務 邏輯備份 + 物理備份雙軌制:每日 mysqldump 全量邏輯備份 (異地存儲、跨版本可用) + 每小時 xtrabackup 增量物理備份 (快速恢復 RTO)。

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