大型資料庫備份傳輸耗時、佔用空間大,是運維常見痛點。本文系統梳理mysqldump管道壓縮備份、分類備份策略、跨平台恢復全流程,助你構建高效可靠的備份體系。
# 備份並壓縮
mysqldump [連接參數] | bzip2 > outputfile.sql.bz2
# 從bzip2備份恢復
bunzip2 < outputfile.sql.bz2 | mysql [連接參數]
# 備份並壓縮
mysqldump [連接參數] | gzip > outputfile.sql.gz
# 從gzip備份恢復
gunzip < outputfile.sql.gz | mysql [連接參數]
注意:gzip為Linux原生工具,Windows環境需安裝GnuWin32或使用WSL。
| 備份類型 | 命令範例 |
|---|---|
| 指定資料庫 | mysqldump -h hostname -u user -p dbname > db.sql |
| 指定輸出路徑 | mysqldump -u root -p mydb -h 192.168.14.204 > D:/mydb.sql |
| 直接壓縮備份 | mysqldump -h host -u user -p dbname | gzip > db.sql.gz |
| 備份特定表 | mysqldump -h host -u user -p dbname table1 table2 > db.sql |
| 同時備份多庫 | mysqldump -h host -u user -p --databases db1 db2 db3 > dbs.sql |
| 備份全例項 | mysqldump --all-databases > allbackupfile.sql |
mysql -h hostname -u user -p dbname < backupfile.sqlgunzip < backup.sql.gz | mysql -h host -u user -p dbname-p 後不輸入密碼,回車後交互輸入(更安全)-h 指定主機,本機可省略--default-character-set=utf8mb4 建議顯式指定字符集,避免亂碼--single-transaction(InnoDB專用)熱備份不鎖表,保證一致性--routines --triggers --events 同步備份存儲過程/觸發器/事件#!/bin/bash
# daily_backup.sh
DATE=$(date +%F_%H-%M)
OUT_DIR=/backup/mysql
DB_USER=backup_user
DB_PASS='xxxxxx'
DB_NAME=production_db
mkdir -p $OUT_DIR
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers --events \
--default-character-set=utf8mb4 $DB_NAME | gzip > $OUT_DIR/${DB_NAME}_${DATE}.sql.gz
# 保留最近7天
find $OUT_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete
掌握壓縮備份與分類策略,配合定時任務與異地複製,即可構建企業級MySQL資料保護體系。