大量開發者嘗試在 MySQL 交互式客戶端(mysql> 提示符下)執行 mysqldump,結果報錯:
mysql> mysqldump -u root -p db_name > backup.sql;
ERROR 1064 (42000): You have an error in your SQL syntax...
mysql/bin/ 目錄,屬於客戶端工具,而非 SQL 語句mysqldump 直接連接 Server 導出,mysql 客戶端是另一個連接# 基本導出
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-transaction | InnoDB 熱備份必加(一致性快照,不鎖表) |
| --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
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)
混淆兩者是新手最常見的「低級錯誤」,也是面試必考點。