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

MySQL 數據庫導出與導入實操速查:mysqldump 與 source 命令

     編輯:MySQL 綜合教學

導出

# 進入 bin 目錄(或已加 PATH)
cd /usr/local/mysql/bin

# 導出單庫(含建表、數據、觸發器、存儲過程)
mysqldump -u root -p --single-transaction --routines --triggers --events db_name > /backup/db_name_$(date +%F).sql

# 導出多庫
mysqldump -u root -p --databases db1 db2 > /backup/multi_db.sql

# 導出全例(含 mysql 系統庫,謹慎)
mysqldump -u root -p --all-databases > /backup/full_$(date +%F).sql

# 只導結構(不含數據)
mysqldump -u root -p -d db_name > /backup/db_name_struct.sql

# 壓縮導出(管道)
mysqldump -u root -p db_name | gzip > /backup/db_name_$(date +%F).sql.gz

關鍵參數解析

參數作用
--single-transactionInnoDB 熱備份核心,開啟一致性快照,不鎖表
--routines導出存儲過程/函數
--triggers導出觸發器
--events導出 Event 調度器任務
--master-data=2輸出註釋形式的 CHANGE MASTER TO 位置/GTID,用於從庫搭建
--set-gtid-purged=OFF不輸出 GTID 集合,避免跨版本導入報錯
--quick流式讀取,不緩存全表結果集,大表必加

導入

方法一:MySQL 客戶端 source 命令(交互式)

mysql -u root -p
CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE db_name;
SOURCE /backup/db_name_2024-01-15.sql;

方法二:管道重定向(非交互,適合腳本)

mysql -u root -p db_name < /backup/db_name_2024-01-15.sql
# 或壓縮文件
zcat /backup/db_name_2024-01-15.sql.gz | mysql -u root -p db_name

方法三:多庫導入(含 CREATE DATABASE)

mysql -u root -p < /backup/multi_db.sql
# 或全例
mysql -u root -p < /backup/full_2024-01-15.sql

大數據量導入優化

  1. 關閉索引/外鍵/唯一檢查:
    SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET AUTOCOMMIT=0;
    SOURCE big.sql;
    SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; SET AUTOCOMMIT=1;
  2. 調大 InnoDB 緩衝:SET GLOBAL innodb_buffer_pool_size=4G;(臨時)。
  3. 並行導入:將大表按主鍵範圍拆分多個 SQL,多會話並行 SOURCE。
  4. 用 LOAD DATA 替代 INSERT:導出時 --tab 生成 CSV,導入用 LOAD DATA INFILE,速度提升 5-10 倍。

跨版本遷移注意

  • 高版本導出 → 低版本導入:易報錯(語法、函數、數據類型不支援),需人工修正 SQL。
  • 低版本 → 高版本:通常兼容,導入後**必須運行** mysql_upgrade 更新系統表。
  • 字符集不一致:導出前確認 SET NAMES utf8mb4,導入庫預設同字符集。

驗證導入結果

# 表行數對比
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='db_name';

# 核心表抽樣
SELECT COUNT(*) FROM db_name.core_table;
SELECT * FROM db_name.core_table ORDER BY id DESC LIMIT 5;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved