萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Linux 下 MySQL 每日自動備份 Shell 腳本實戰

為什麼要自動化備份?

「沒有一台 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 格式日期,便於排序與保留策略

部署與定時執行

  1. 賦予執行權限:chmod +x /home/mysql/backup.sh
  2. 編輯 crontab:crontab -e
  3. 每日凌晨 2 點執行:
    0 2 * * * /home/mysql/backup.sh >> /home/mysql/backup.log 2>&1

進階加固建議

  • 異地備份:配合 rsync 或 scp 推送至遠端存儲/對象存儲(S3/OSS)。
  • 驗證可恢復性:每月隨機抽取一份備份在測試環境 gunzip < backup.gz | mysql -u root -p test_db 實測還原。
  • 監控告警:腳本返回非 0 碼或日志含 ERROR 時觸發釘釘/企業微信/郵件告警。
  • 多庫備份:將 DB_NAME 改為數組循環,或使用 --databases db1 db2 多庫同備。

總結

幾十行 Shell 腳本 + crontab,即可構建起 MySQL 數據安全的最後一道防線。切記:備份未測試等於沒備份,定期演練還原流程才是硬道理。

copyright © 萬盛學電腦網 all rights reserved