「沒有一台 MySQL 是永遠不出問題的,發現備份才是王道。」硬體故障、誤操作、勒索病毒,任何一項都能讓數據歸零。一個可靠的每日備份腳本是運維的底線。
#!/bin/sh
# File: /home/mysql/backup.sh
# Database info
DB_NAME="myad"
DB_USER="ad123"
DB_PASS="ad^%%#dd"
# Paths
BIN_DIR="/opt/lampp/bin"
BCK_DIR="/backup/www/sqlback"
DATE=$(date +%F)
# 執行備份:單庫、壓縮、帶日期命名
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/adm_${DATE}.gz
# 可選:刪除 7 天前舊備份,釋放磁碟空間
# find $BCK_DIR -name "adm_*.gz" -mtime +7 -delete
| 參數 | 作用 |
|---|---|
--opt | 啟用快速導出優化組合(含 --add-drop-table、--extended-insert 等) |
gzip | 管道流式壓縮,不落地中間文件,節省 I/O |
date +%F | 生成 YYYY-MM-DD 格式日期,便於排序與保留策略 |
chmod +x /home/mysql/backup.shcrontab -e0 2 * * * /home/mysql/backup.sh >> /home/mysql/backup.log 2>&1rsync 或 scp 推送至遠端存儲/對象存儲(S3/OSS)。gunzip < backup.gz | mysql -u root -p test_db 實測還原。ERROR 時觸發釘釘/企業微信/郵件告警。DB_NAME 改為數組循環,或使用 --databases db1 db2 多庫同備。幾十行 Shell 腳本 + crontab,即可構建起 MySQL 數據安全的最後一道防線。切記:備份未測試等於沒備份,定期演練還原流程才是硬道理。