雖然 phpMyAdmin、Navicat 等圖形化工具操作直觀,但在自動化腳本、伺服器無形介面環境或追求極致效能時,MySQL 原生命令行工具 mysqldump 和 mysql 依然是最輕量、最高效的選擇。本文將系統整理命令列模式下備份、還原資料庫與資料表的常用姿勢。
最基礎的用法,將 test_db 導出為 SQL 腳本:
mysqldump -u root -p test_db > d:/abc.sql
執行後會提示輸入密碼,完成後在 D 槽根目錄得到 abc.sql。
使用 --databases 參數指定多個資料庫名稱,輸出檔案會自動包含 CREATE DATABASE 與 USE 語句:
mysqldump -u root -p --databases test_db1 test_db2 > d:/abc.sql
透過 -h 指定遠端 IP,同樣支援密碼驗證:
mysqldump -h 192.168.1.1 -u root -p test_db > d:/abc.sql
提示:確保遠端 MySQL 的 bind-address 允許連線,且防火牆開放 3306 埠。
使用 mysql 客戶端讀取 SQL 檔案並執行:
mysql -u root -p test_db < d:/abc.sql
若 SQL 檔案已包含 CREATE DATABASE,可省略資料庫名稱直接導入:
mysql -u root -p < d:/abc.sql
在資料庫名稱後列出表名,即可只導出特定表:
# 備份單張表
mysqldump -u root -p test_db tab1 > d:/tab1.sql
# 備份多張表
mysqldump -u root -p test_db tab1 tab2 tab3 > d:/tables.sql
| 參數 | 說明 |
|---|---|
--single-transaction | InnoDB 熱備份必備,啟動一致性快照,不鎖表 |
--quick / -q | 大表導出時逐行讀取,避免記憶體暴增 |
--extended-insert | 使用多行 INSERT 語句,大幅縮小檔案與提升還原速度(預設開啟) |
--default-character-set=utf8mb4 | 指定導出字元集,防止中文亂碼 |
--routines / -R | 包含預存程序與函數 |
--triggers | 包含觸發器(預設開啟) |
mysqldump -u root -p \
--single-transaction \
--quick \
--extended-insert \
--default-character-set=utf8mb4 \
--routines --triggers \
test_db > /backup/test_db_$(date +%F).sql
搭配 gzip 壓縮可進一步節省空間:
mysqldump ... | gzip > /backup/test_db_$(date +%F).sql.gz
熟練掌握命令列備份/還原,不僅能應對無圖形介面的伺服器環境,更能輕鬆整合進 Shell 腳本、Cron 定時任務或 CI/CD 流程,實現真正的自動化運維。