首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux MySQL 定時備份壓縮腳本 + crontab 排程完整實戰

     編輯:MySQL 綜合教學

Linux MySQL 定時備份壓縮腳本 + crontab 排程完整實戰

生產環境 MySQL 備份標準化流程:mysqldump 邏輯備份 → gzip 壓縮 → 時間戳命名 → crontab 定時執行 → 保留策略清理。

1. 驗證 mysqldump 可用性

mkdir -p /var/backup/mysql
cd /var/backup
mysqldump -u root -p'YourPass' db_name > mysql/db_name.sql
ls -lh mysql/db_name.sql  # 確認產出

2. 建立備份腳本 /var/backup/mysql-backup.sh

#!/bin/bash
# 設定區
DB_USER="root"
DB_PASS="YourPass"
DB_NAME="db_name"
BACKUP_DIR="/var/backup/mysql"
RETENTION_DAYS=7          # 保留天數

# 時間戳檔名
FILE_NAME="${DB_NAME}-$(date +%Y%m%d%H%M%S)"

# 進入備份目錄
cd "${BACKUP_DIR}"

# 邏輯備份
mysqldump -u"${DB_USER}" -p"${DB_PASS}" "${DB_NAME}" > "${FILE_NAME}.sql"

# 壓縮 (gzip 預設等級 6,平衡速度/壓縮比)
gzip "${FILE_NAME}.sql"

# 清理舊備份 (保留最近 N 天)
find "${BACKUP_DIR}" -type f -name "${DB_NAME}-*.sql.gz" -mtime +${RETENTION_DAYS} -delete

echo "$(date '+%F %T') Backup completed: ${FILE_NAME}.sql.gz" >> /var/log/mysql-backup.log

賦予執行權限:

chmod +x /var/backup/mysql-backup.sh

3. 手動測試腳本

/var/backup/mysql-backup.sh
ls -lh /var/backup/mysql/
tail /var/log/mysql-backup.log

4. 配置 crontab 定時執行

# 編輯 root 的 crontab
crontab -e

# 每天凌晨 3:00 執行 (低峰期)
0 3 * * * /var/backup/mysql-backup.sh > /dev/null 2>&1

# 或每 6 小時 (高頻業務)
0 */6 * * * /var/backup/mysql-backup.sh > /dev/null 2>&1

5. crontab 語法速查

* * * * *  command
分 時 日 月 周
# 範例
30 2 * * *     /path/script.sh          # 每天 02:30
0 3 * * 0      /path/script.sh          # 每週日 03:00
*/15 * * * *   /path/script.sh          # 每 15 分鐘
0 0 1 * *      /path/script.sh          # 每月 1 號 00:00
0 22 * * 1-5   /path/script.sh          # 週一至五 22:00

6. 管理 crontab 常用指令

指令說明
crontab -l列出當前排程
crontab -e編輯排程 (vi 編輯器)
crontab -r移除所有排程 (慎用!)
crontab /path/file從檔案載入排程

7. 進階:備份驗證與異地複製

# 腳本末尾加入
# 1. 校驗壓縮檔完整性
gzip -t "${FILE_NAME}.sql.gz" || { echo "Corrupt backup!" | mail -s "MySQL Backup Failed" admin@company.com; exit 1; }

# 2. 上傳至遠端備份伺服器 (rsync over SSH)
rsync -avz "${BACKUP_DIR}/${FILE_NAME}.sql.gz" backup-user@backup-server:/remote/backup/mysql/

# 3. 推送成功指標至 Prometheus Pushgateway
curl --data-binary "mysql_backup_success 1" https://pushgateway:9091/metrics/job/mysql_backup

8. 物理備份替代方案 (大數據量/低 RTO)

  • Percona XtraBackup:熱備份 InnoDB,不阻塞寫入,支援增量、流式傳輸、並行壓縮。
  • MySQL Enterprise Backup:官方商業工具,功能類似 XtraBackup。
  • LVM/ZFS 快照 + cp:檔案系統層級瞬間凍結,極快,需規劃磁碟布局。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved