mysqldump 是客戶端程序,**不可在 mysql> 交互模式下執行**$MYSQL_HOME/bin/mysqldump(Windows/Linux 同名)mysqldump --helpmysqldump -h -u -p >
# 遠程備份
mysqldump -h 192.168.0.1 -uroot -p123 erm > d:\erm.sql
# 本地備份(省略 -h)
mysqldump -uroot -p dbcurr > 20090219.sql
關鍵點:
— 密碼緊貼 -p 無空格(安全建議省略密碼交互輸入)
— > 重定向輸出,**無分號結尾**
— 未指定 -h 默認連接本地 Socket
# 本地恢復
mysql -uroot -p dbcurr < d:\20090219.sql
# 遠程恢復
mysql -h 192.168.0.1 -uroot -p dbcurr < backup.sql
前置條件:目標資料庫必須已存在(除非備份含 CREATE DATABASE)。
| 場景 | 命令範例 |
|---|---|
| 單表結構+數據 | mysqldump -uroot -p --tables db tbl > tbl.sql |
| 僅結構 | mysqldump -uroot -p -d db > struct.sql |
| 僅數據 | mysqldump -uroot -p -t db > data.sql |
| 多庫備份 | mysqldump -uroot -p -B db1 db2 > multi.sql |
| 全庫備份 | mysqldump -uroot -p -A > all.sql |
| InnoDB 熱備份(生產標配) | mysqldump --single-transaction --master-data=2 -R -E db > backup.sql |
| 分離導出(大表專用) | mysqldump -T /tmp db tbl → tbl.sql + tbl.txt |
# 備份並壓縮
mysqldump --single-transaction db | gzip > db_$(date +%F).sql.gz
# 遠程直傳(無本地落盤)
mysqldump -h src_host db | ssh dst_host "mysql -h localhost -uroot -p db"
| 錯誤 | 原因 | 解決 |
|---|---|---|
| ERROR 1049: Unknown database | 目標庫不存在 | 先 CREATE DATABASE |
| Access denied | 權限不足/密碼錯誤 | 檢查賬戶、FLUSH PRIVILEGES |
| Lost connection | 大表導出超時 | 調大 net_read_timeout、max_allowed_packet |
| mysqldump: command not found | PATH 未包含 bin 目錄 | 用絕對路徑或 export PATH |
#!/bin/bash
# verify_backup.sh
BACKUP_FILE=$1
TEST_DB="verify_$(date +%s)"
mysql -uroot -p -e "CREATE DATABASE $TEST_DB;"
zcat $BACKUP_FILE | mysql -uroot -p $TEST_DB
TABLE_COUNT=$(mysql -uroot -p -N -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$TEST_DB';")
echo "Restored $TABLE_COUNT tables."
mysql -uroot -p -e "DROP DATABASE $TEST_DB;"
建議納入 CI/CD 流程,每日自動驗證最近一次全備。