首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 下 MySQL 自動備份腳本與 Crontab 定時任務配置實戰

     編輯:MySQL 資料庫相關知識

方案一:物理備份 (tar 打包數據目錄) — 適用於 MyISAM/靜態庫


#!/bin/bash
# /usr/sbin/bakmysql_physical
BAK_DIR="/mysqldata"
DATA_DIR="/var/lib/mysql"  # 確認實際 datadir
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BAK_DIR"

# 停寫或加讀鎖 (MyISAM 必須)
# mysql -u root -p"pass" -e "FLUSH TABLES WITH READ LOCK;"

tar czf "${BAK_DIR}/mysql_${DATE}.tar.gz" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")"

# 解鎖
# mysql -u root -p"pass" -e "UNLOCK TABLES;"

# 保留 7 天
find "$BAK_DIR" -name "mysql_*.tar.gz" -mtime +7 -delete

方案二:邏輯備份 (mysqldump) — 通用、跨版本、InnoDB 熱備


#!/bin/bash
# /usr/sbin/bakmysql_logical
BAK_DIR="/mysqldata"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BAK_DIR"

mysqldump -u root -p"YourPassword" \
  --single-transaction \
  --quick \
  --master-data=2 \
  --hex-blob \
  --routines --triggers --events \
  --all-databases | gzip > "${BAK_DIR}/mysql_${DATE}.sql.gz"

# 保留 7 天
find "$BAK_DIR" -name "mysql_*.sql.gz" -mtime +7 -delete

Crontab 部署


# 1. 賦予執行權限
chmod +x /usr/sbin/bakmysql_logical

# 2. 編輯 crontab (root 用戶)
crontab -e

# 3. 添加定時任務 (每天凌晨 3:01 執行)
01 3 * * * /usr/sbin/bakmysql_logical >> /var/log/mysql_backup.log 2>&1

# 格式解釋:分 時 日 月 周 命令
# 01 3 * * * = 每天 03:01

進階:系統級 crontab (/etc/crontab) 多用戶管理


# /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 示例:每天 3:01 root 執行邏輯備份
01 3 * * * root /usr/sbin/bakmysql_logical

# 示例:每小時增量備份 (需配合 binlog)
0 * * * * mysqlbinlog --start-position=... > /mysqldata/incr_$(date +\%H).sql

驗證與恢復演練 (必做)

  1. 檢查備份文件完整性:gzip -t mysql_20240115_030101.sql.gz。
  2. 定期演練恢復:
    gunzip -c mysql_20240115_030101.sql.gz | mysql -u root -p test_restore
    驗證表結構、行數、關鍵數據一致性。
  3. 異地複製:rsync -avz /mysqldata/ backup-server:/remote/backup/mysql/。

避坑指南

  • 密碼安全:不要明文寫在腳本,使用 ~/.my.cnf [client] password=xxx (chmod 600)。
  • 單事務長時間:大庫 --single-transaction 可能導致 Undo Log 膨脹,監控 History list length,必要時分庫備份。
  • 備份窗口衝突:避開業務高峰、統計信息收集、DDL 變更窗口。
  • 磁盤空間預警:腳本前加 df -h /mysqldata 判斷剩餘空間 > 備份預估 2 倍。

總結

Linux MySQL 自動備份三步走:**規範腳本 (mysqldump 核心參數) → Crontab 定時 → 異地複製 + 定期恢復演練**。邏輯備份通用性最強,物理備份適合極大唯讀庫。備份未驗證等於無備份,恢復演練是底線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved