萬盛學電腦網

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

Linux MySQL 自動備份腳本實戰:多實例支援、分表打包、保留清理與異地郵件通知

腳本特性

  • 支援多 MySQL 實例(參數指定 host ID)
  • 自動發現庫中所有表,單表單獨導出,便於單表恢復
  • 打包為 .tar,保留最近 N 份,自動清理舊備份
  • 詳細日誌記錄耗時、檔案大小,支援 mutt 郵件通知

使用方式


./mysql_data_backup.sh 110 www_cas
./mysql_data_backup.sh 112 www_qiche
# 參數1:host ID(腳本內映射 IP/帳密),參數2:資料庫名

核心代碼邏輯


#!/bin/bash
# 參數檢查與實例映射
if [ $1 -eq 110 ]; then db_host=192.168.1.110; db_user=xxx; db_passwd=xxx; fi
if [ $1 -eq 112 ]; then db_host=192.168.1.112; db_user=xxx; db_passwd=xxx; fi

db_name=$2
tables=$(mysqlshow -u$db_user -p$db_passwd -h$db_host $db_name | sed 's/|//g; s/ //g; 1,4d; $d')

# 逐表導出
for table in $tables; do
    mysqldump -e -h $db_host -u $db_user -p$db_passwd $db_name $table > $fileDir/$table.sql
done

# 打包
tar cvf ${datestamp}.tar ./${datestamp}
rm -rf ./${datestamp}

# 保留最近 3 份
find $backupDir -name "*.tar" | sort -r | tail -n +4 | xargs rm -f

Windows 批次恢復腳本(配合導出的單表 SQL)


:: main.bat
for %%b IN (./*.sql) DO @restore.bat %%b

:: restore.bat
@echo off
pause
echo 正在還原 %1
mysql -h localhost -u root -t database1 --default-character-set=utf8 -e "source %1"
echo 完成 %1

生產環境強化建議

  1. 並行導出:使用 mydumper 或 & 後台並行 + wait,大幅縮短備份窗口
  2. 上傳異地:scp / rsync / aws s3 cp / ossutil cp 推送至對象存儲
  3. 校驗完整性:導出後 md5sum 記錄,恢復前校驗
  4. 監控告警:腳本返回非 0 碼觸發 Zabbix/PagerDuty 告警
  5. 加密:openssl enc -aes-256-cbc -salt -in backup.sql -out backup.sql.enc
copyright © 萬盛學電腦網 all rights reserved