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

MySQL 數據導出必知:mysqldump 只能在系統命令行執行,不能在 MySQL 客戶端執行

     編輯:MySQL 資料庫相關知識

核心誤區

大量開發者嘗試在 MySQL 交互式客戶端(mysql> 提示符下)執行 mysqldump,結果報錯:

mysql> mysqldump -u root -p db_name > backup.sql;
ERROR 1064 (42000): You have an error in your SQL syntax...

根本原因

  • mysqldump 是獨立的可執行程序,位於 mysql/bin/ 目錄,屬於客戶端工具,而非 SQL 語句
  • MySQL 客戶端只能解析 SQL 語句(SELECT、INSERT、SHOW 等),無法調用外部程序
  • 兩者進程完全獨立:mysqldump 直接連接 Server 導出,mysql 客戶端是另一個連接

正確操作姿勢

系統命令行(CMD / PowerShell / Bash)

# 基本導出
mysqldump -u root -p db_name > backup.sql

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

# 導出全庫(含用戶權限)
mysqldump -u root -p --all-databases > full_backup.sql

# 僅導出結構(無數據)
mysqldump -u root -p -d db_name > schema.sql

# 壓縮導出(管道)
mysqldump -u root -p db_name | gzip > backup.sql.gz

常用參數速查

參數作用
-u, --user用戶名
-p, --password密碼(建議不帶值,交互式輸入)
-h, --host主機地址(默認 localhost)
-P, --port端口(默認 3306)
--single-transactionInnoDB 熱備份必加(一致性快照,不鎖表)
--master-data=2備份文件中註釋 Binlog 位點,便於主從搭建
--routines / --triggers / --events導出存儲過程/觸發器/事件(默認不導出)
--hex-blob二進制字段用十六進制導出,避免編碼問題
--quick大表導出不緩存到內存,直接流式寫入(默認開啟)

進階場景:定時自動備份腳本

#!/bin/bash
# auto_backup.sh
DATE=$(date +%F_%H-%M)
DIR=/backup/mysql
DB=my_db
USER=backup_user
PASS=xxx

mysqldump -u$USER -p$PASS --single-transaction --master-data=2 --routines --triggers $DB | gzip > $DIR/${DB}_${DATE}.sql.gz

# 保留 7 天
find $DIR -name "${DB}_*.sql.gz" -mtime +7 -delete

Windows 環境特別提醒

  • 路徑使用雙引號:mysqldump ... > "D:\backup\db_20240101.sql"
  • 計劃任務中「操作」填 cmd.exe,「參數」填 /c "C:\scripts\backup.bat"
  • 密碼特殊字符需轉義(如 % → %%)

驗證備份可用性(關鍵!)

# 1. 檢查文件大小非 0
ls -lh backup.sql.gz

# 2. 檢查文件結尾有完成標記
zcat backup.sql.gz | tail -5
-- 應包含: -- Dump completed on 2024-01-15  2:00:00

# 3. 定期演練恢復(測試庫)
gunzip < backup.sql.gz | mysql -u root -p test_db

總結

mysqldump ≠ SQL 語句。記住口訣:
🖥️ 系統命令行跑 mysqldump → 導出文件
🔌 MySQL 客戶端跑 SQL → 查詢/管理/導入(source backup.sql)
混淆兩者是新手最常見的「低級錯誤」,也是面試必考點。

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