Linux下MySQL數(shù)據(jù)庫定時備份腳本與Crontab配置教學(xué)
在生產(chǎn)環(huán)境中,數(shù)據(jù)庫是核心資產(chǎn)之一,定期備份數(shù)據(jù)庫可以有效防止意外數(shù)據(jù)丟失。本文將分享一份 MySQL 定時備份腳本,并講解如何通過 crontab 實現(xiàn)自動化。
文章參考:MySQL 數(shù)據(jù)庫本地及異地備份:全面指南
上邊這個鏈接里邊針對mysql的賬戶密碼儲存更為安全些,適合自己的最好
備份腳本詳解
下面是一份示例 Bash 腳本 mysql_backup.sh:
#!/bin/bash
# ---------------- 配置區(qū)域 ----------------
# MySQL用戶名
MYSQL_USER="user"
# MySQL密碼
MYSQL_PASS="password"
# MySQL主機(jī),默認(rèn)localhost
MYSQL_HOST="localhost"
# 備份存儲路徑
BACKUP_PATH="/data/mysql_backup"
# 備份保留天數(shù)
RETENTION_DAYS=7
# 備份日志
BACKUP_LOG="$BACKUP_PATH/back.log"
# 多個數(shù)據(jù)庫,用空格分隔
DATABASES=("db1" "db2" "db3")
# -----------------------------------------
# 獲取當(dāng)前日期
DATE=$(date +"%Y%m%d_%H%M%S")
# 確保備份目錄存在
mkdir -p "$BACKUP_PATH"
# 遍歷數(shù)據(jù)庫進(jìn)行備份
for DB in "${DATABASES[@]}"; do
BACKUP_FILE="$BACKUP_PATH/${DB}_${DATE}.sql.gz"
echo "Backing up database: $DB -> $BACKUP_FILE"
mysqldump -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASS" "$DB" | gzip > "$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "${DATE} Backup of $DB completed successfully." >> ${BACKUP_LOG}
else
echo "${DATE} Backup of $DB failed!" >> ${BACKUP_LOG}
fi
done
# 刪除7天前的備份
find "$BACKUP_PATH" -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -exec rm -f {} \;
echo "${DATE} Old backups older than $RETENTION_DAYS days removed." >> ${BACKUP_LOG}
腳本功能說明
1.配置區(qū)域:
MYSQL_USER、MYSQL_PASS、MYSQL_HOST用于數(shù)據(jù)庫連接。BACKUP_PATH指定備份文件存放路徑。RETENTION_DAYS控制備份保留天數(shù)。DATABASES列出需要備份的數(shù)據(jù)庫列表。
2.備份操作:
- 腳本通過
mysqldump將數(shù)據(jù)庫導(dǎo)出,并用gzip壓縮。 - 每個數(shù)據(jù)庫生成獨立文件,命名規(guī)則為:
數(shù)據(jù)庫名_日期時間.sql.gz。
3.日志記錄:
成功或失敗情況會記錄到 $BACKUP_LOG 日志文件中。
4.清理舊備份:
使用 find 命令刪除超過 $RETENTION_DAYS 天的備份文件,保證磁盤空間不會被占滿。
授權(quán)與可執(zhí)行權(quán)限
保存腳本為 /usr/local/bin/mysql_backup.sh 后,需要賦予執(zhí)行權(quán)限:
chmod +x /usr/local/bin/mysql_backup.sh
使用 Crontab 定時執(zhí)行
通過 crontab 可以實現(xiàn)腳本自動執(zhí)行,無需手動備份。
編輯 Crontab
crontab -e
添加定時任務(wù)
例如每天凌晨 2 點備份:
0 2 * * * /usr/local/bin/mysql_backup.sh
0 2 * * *表示每天 02:00 執(zhí)行。- 可以根據(jù)需求修改時間,例如每小時備份:
0 * * * * /usr/local/bin/mysql_backup.sh
查看 Crontab 配置
crontab -l
備份文件與日志示例
假設(shè)今天備份了 db1、db2,備份目錄可能如下:
/data/mysql_backup/
├── db1_20250901_020000.sql.gz
├── db2_20250901_020000.sql.gz
└── back.log
日志文件 back.log 示例:
20250901_020000 Backup of db1 completed successfully.
20250901_020000 Backup of db2 completed successfully.
20250901_020001 Old backups older than 7 days removed.
優(yōu)化建議
安全性:
避免在腳本中明文存儲密碼,可使用 MySQL 配置文件 ~/.my.cnf 存儲賬戶信息。
郵件通知:
可結(jié)合 mail 或 sendmail 實現(xiàn)備份失敗通知。
多服務(wù)器備份:
若有多臺 MySQL 實例,可通過 SSH 同步備份到集中存儲服務(wù)器。
總結(jié)
本文提供了一份 MySQL 自動備份腳本,結(jié)合 crontab 實現(xiàn)定時任務(wù),確保數(shù)據(jù)庫數(shù)據(jù)安全與業(yè)務(wù)連續(xù)性。通過日志記錄和舊備份清理,可以有效監(jiān)控備份情況并節(jié)約磁盤空間。
定期備份是運維必備技能,建議在生產(chǎn)環(huán)境中盡早部署并驗證恢復(fù)流程,保證關(guān)鍵數(shù)據(jù)萬無一失。
到此這篇關(guān)于Linux下MySQL數(shù)據(jù)庫定時備份腳本與Crontab配置教學(xué)的文章就介紹到這了,更多相關(guān)MySQL定時備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux SSHD啟動失敗:OpenSSL版本不匹配問題分析與解決方法
在 Linux 服務(wù)器上,sshd 可能因 OpenSSL 版本不匹配而啟動失敗,本篇文章將詳細(xì)分析該錯誤的原因,并提供多種解決方案,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2025-07-07
Linux上使用telnet連接本機(jī)IP地址端口方式
用戶需配置iptables允許本機(jī)TCP 80端口響應(yīng),輸入規(guī)則設(shè)源IP為本機(jī)以限制外部訪問,輸出規(guī)則設(shè)目標(biāo)IP為本機(jī)以確保本地連接,但telnet實際使用23端口,80端口可能為其他服務(wù),需確認(rèn)端口及規(guī)則方向2025-07-07
Ubuntu無網(wǎng)絡(luò)標(biāo)識的問題及解決
這篇文章主要介紹了Ubuntu無網(wǎng)絡(luò)標(biāo)識的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
用DNSPod和Squid打造自己的CDN (八) 測試并運行SQUID
想要測試SQUID是否正常,必須要先把www.naizhao.com這個域名解析到2.2.2.2這個IP上。跟上一章一樣,如果你是網(wǎng)通用戶就不需要做任何操作,DNSPod會給你返回2.2.2.2這個IP2013-04-04
Linux環(huán)境下生成openssl證書注意細(xì)節(jié)介紹
大家好,本篇文章主要講的是Linux環(huán)境下生成openssl證書注意細(xì)節(jié)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12

