一條指令備份所有資料庫(含結構、資料、觸發器、預存程序),適合排程備份腳本使用。
mysqldump \
--user=root \
--password='your_password' \
--lock-all-tables \
--all-databases \
--routines \
--triggers \
--events \
--single-transaction \
--master-data=2 \
> /backup/full_$(date +%F_%H-%M-%S).sql
| 參數 | 作用 |
|---|---|
--all-databases | 備份所有資料庫 |
--lock-all-tables | 全域讀鎖(MyISAM 必須;InnoDB 建議改用 --single-transaction) |
--single-transaction | InnoDB 一致性快照,無需鎖表 |
--routines | 包含預存程序/函數 |
--triggers | 包含觸發器 |
--events | 包含 Event Scheduler 事件 |
--master-data=2 | 輸出 CHANGE MASTER TO 註解(含 binlog 位置),利於主從搭建 |
--hex-blob | 二進位欄位以十六進位輸出(避免編碼問題) |
--quick | 大表分批讀取,避免記憶體暴增 |
mysqldump -u root -p --single-transaction --routines --triggers --events --all-databases > full_backup.sql
mysqldump -u root -p --lock-all-tables --routines --triggers --events --all-databases > full_backup.sql
mysqldump -u root -p --single-transaction --all-databases | gzip > full_backup_$(date +%F).sql.gz
mysql -u root -p < full_backup.sql
# 或壓縮檔
zcat full_backup.sql.gz | mysql -u root -p
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F_%H-%M-%S)
mkdir -p $BACKUP_DIR
mysqldump -u root -p'password' \
--single-transaction --routines --triggers --events --all-databases \
| gzip > "$BACKUP_DIR/full_$DATE.sql.gz"
# 保留 7 天
find $BACKUP_DIR -name "full_*.sql.gz" -mtime +7 -delete
設定 crontab 定時執行,即可實現自動化全量備份。