邏輯備份、跨版本遷移、異構同步首選。物理備份(xtrabackup)另文說明。
| 參數 | 作用 |
|---|---|
-h | 主機地址 |
-u | 使用者名 |
-p | 密碼(建議配置檔 [client] password=xxx 避免歷史記錄洩露) |
--single-transaction | InnoDB 熱備份,不鎖表(需啟用 binlog) |
--master-data=2 | 輸出 CHANGE MASTER TO 註解,便於從庫搭建 |
--routines --triggers --events | 備份存儲過程/觸發器/事件 |
--hex-blob | 二進制欄位十六進制輸出,避免編碼問題 |
--quick | 大表分批讀取,減少記憶體佔用 |
--compress | 網路傳輸壓縮 |
mysqldump -h127.0.0.1 -uroot -p --single-transaction \ --master-data=2 --routines --triggers --events \ --hex-blob --quick szldb > backup_$(date +%F).sql
mysqldump -h127.0.0.1 -uroot -p szldb | gzip > backup_$(date +%F).sql.gz
mysqldump -h127.0.0.1 -uroot -p --no-data szldb > structure.sql
mysqldump -h127.0.0.1 -uroot -p szldb table1 table2 > tables.sql
mysqldump -h127.0.0.1 -uroot -p --databases szldb test > multi.sql
mysqldump -h127.0.0.1 -uroot -p --all-databases > full.sql
# 一般還原 mysql -h127.0.0.1 -uroot -p szldb < backup.sql # 壓縮檔管道還原 gunzip < backup.sql.gz | mysql -h127.0.0.1 -uroot -p szldb # 跨伺服器遷移(管道直連,無落地檔) mysqldump -h127.0.0.1 -uroot -p szldb | mysql -h10.0.0.2 -uroot -p -C serweb
#!/bin/bash
# /usr/local/bin/mysql_backup.sh
set -euo pipefail
BACKUP_DIR=/backup/mysql
DB=szldb
USER=backup_user
PASS=$(cat /etc/mysql/backup.pass)
DATE=$(date +%F_%H-%M)
mysqldump -h127.0.0.1 -u$USER -p$PASS --single-transaction \
--master-data=2 --routines --triggers --events --hex-blob --quick $DB \
| gzip > ${BACKUP_DIR}/${DB}_${DATE}.sql.gz
# 保留 30 天
find $BACKUP_DIR -name "${DB}_*.sql.gz" -mtime +30 -delete
mysql < backup.sql 驗證還原成功CHECKSUM TABLE 一致性建立「備份→驗證→留存→演練」閉環,才是真正的資料安全。