MySQL數(shù)據(jù)庫(kù)自動(dòng)備份的實(shí)用方法
有過一次被黑客劫持?jǐn)?shù)據(jù)庫(kù)并勒索比特幣的經(jīng)歷后,才知道數(shù)據(jù)備份的重要性
記錄一下方法
一、編寫備份腳本
創(chuàng)建一個(gè)Shell腳本文件(例如 /opt/scripts/mysql_backup.sh),內(nèi)容如下:
#!/bin/bash
# 數(shù)據(jù)庫(kù)配置
DB_USER="your_username"
DB_PASSWORD="your_password"
# 獲取所有數(shù)據(jù)庫(kù)列表(排除系統(tǒng)數(shù)據(jù)庫(kù))
DB_LIST=$(mysql -u$DB_USER -p$DB_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
# 備份配置
BACKUP_DIR="/path/to/your/backup/directory"
DATE=$(date +"%Y%m%d")
# 創(chuàng)建日期目錄
TODAY_DIR="$BACKUP_DIR/$DATE"
mkdir -p $TODAY_DIR
# 循環(huán)備份每個(gè)非系統(tǒng)數(shù)據(jù)庫(kù)
for DB_NAME in $DB_LIST; do
BACKUP_FILE="$TODAY_DIR/${DB_NAME}.sql.gz"
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME | gzip > $BACKUP_FILE
done
# 清理30天前的舊備份
find $BACKUP_DIR -type d -name "20*" -mtime +30 -exec rm -rf {} \; 2>/dev/null注意,以上是備份所有的非系統(tǒng)數(shù)據(jù)庫(kù)
如果想備份單個(gè)數(shù)據(jù)庫(kù),可以簡(jiǎn)單點(diǎn),如下:
#!/bin/bash
# 數(shù)據(jù)庫(kù)配置
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database_name"
# 備份配置
BACKUP_DIR="/path/to/your/backup/directory" # 請(qǐng)?zhí)鎿Q為你的目標(biāo)目錄
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$DATE.sql"
# 執(zhí)行備份
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE
# (可選)壓縮備份文件以節(jié)省空間
gzip $BACKUP_FILE
# (可選)清理超過N天的舊備份,例如保留30天
find $BACKUP_DIR -name "${DB_NAME}_backup_*.sql.gz" -mtime +30 -delete如果想備份多個(gè)數(shù)據(jù)庫(kù),參考如下:
#!/bin/bash
# 數(shù)據(jù)庫(kù)配置
DB_USER="your_username"
DB_PASSWORD="your_password"
# 要備份的數(shù)據(jù)庫(kù)列表,用空格分隔
DB_LIST="database1 database2 database3"
# 備份配置
BACKUP_DIR="/path/to/your/backup/directory"
DATE=$(date +"%Y%m%d")
TIME=$(date +"%H%M%S")
# 創(chuàng)建日期目錄
TODAY_DIR="$BACKUP_DIR/$DATE"
mkdir -p $TODAY_DIR
# 日志文件
LOG_FILE="$BACKUP_DIR/backup.log"
# 記錄備份開始時(shí)間
echo "===== 備份開始: $(date '+%Y-%m-%d %H:%M:%S') =====" >> $LOG_FILE
# 循環(huán)備份每個(gè)數(shù)據(jù)庫(kù)
for DB_NAME in $DB_LIST; do
BACKUP_FILE="$TODAY_DIR/${DB_NAME}_${TIME}.sql"
COMPRESSED_FILE="${BACKUP_FILE}.gz"
echo "正在備份數(shù)據(jù)庫(kù): $DB_NAME" >> $LOG_FILE
# 執(zhí)行備份
if mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE 2>> $LOG_FILE; then
echo " - 備份成功: $DB_NAME" >> $LOG_FILE
# 壓縮備份文件
if gzip -f $BACKUP_FILE; then
echo " - 壓縮成功: $COMPRESSED_FILE" >> $LOG_FILE
else
echo " - 壓縮失敗: $BACKUP_FILE" >> $LOG_FILE
fi
else
echo " - 備份失敗: $DB_NAME" >> $LOG_FILE
fi
done
# (可選)清理超過N天的舊備份,例如保留30天
DAYS_TO_KEEP=30
find $BACKUP_DIR -type d -name "20*" -mtime +$DAYS_TO_KEEP -exec rm -rf {} \; 2>/dev/null
echo "已清理超過${DAYS_TO_KEEP}天的舊備份" >> $LOG_FILE
# 記錄備份結(jié)束時(shí)間
echo "===== 備份完成: $(date '+%Y-%m-%d %H:%M:%S') =====" >> $LOG_FILE
echo "" >> $LOG_FILE重要提示:請(qǐng)務(wù)必將腳本中的 your_username、your_password、your_database_name和 /path/to/your/backup/directory替換為你實(shí)際的數(shù)據(jù)庫(kù)信息和服務(wù)器目錄路徑。
二、設(shè)置腳本權(quán)限
在終端執(zhí)行以下命令,使腳本具有可執(zhí)行權(quán)限:
chmod +x /opt/scripts/mysql_backup.sh
三、配置定時(shí)任務(wù)
使用 crontab -e命令編輯當(dāng)前用戶的定時(shí)任務(wù),添加一行來設(shè)置每天自動(dòng)執(zhí)行。例如,設(shè)置為每天凌晨3點(diǎn)執(zhí)行備份:
0 3 * * * /opt/scripts/mysql_backup.sh
這行配置的含義是:在每天的第0分鐘、第3小時(shí)(即凌晨3:00)執(zhí)行一次備份腳本。
四、測(cè)試備份
bash /opt/scripts/mysql_backup.sh
如果能在備份目錄中找到備份的數(shù)據(jù)庫(kù)文件,就表明腳本文件生效了,會(huì)定時(shí)執(zhí)行,不放心的話可以第二天來看看有沒有正常備份
以上就是MySQL數(shù)據(jù)庫(kù)自動(dòng)備份的實(shí)用方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)庫(kù)自動(dòng)備份的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MYSQL METADATA LOCK(MDL LOCK) 理論及加鎖類型測(cè)試
這篇文章主要介紹了MYSQL METADATA LOCK(MDL LOCK)的內(nèi)容,有理論知識(shí)和加鎖類型測(cè)試的以下代碼,感興趣的朋友請(qǐng)參考下午文2021-09-09
Mysql詳細(xì)剖析數(shù)據(jù)庫(kù)中的存儲(chǔ)引擎
這篇文章詳細(xì)剖析了數(shù)據(jù)庫(kù)中的存儲(chǔ)引擎,存儲(chǔ)引擎是數(shù)據(jù)庫(kù)中非常關(guān)鍵的部分,有感興趣的小伙伴可以參考閱讀本文2023-03-03
mysql 存儲(chǔ)過程判斷重復(fù)的不插入數(shù)據(jù)
這篇文章主要介紹了下面是一個(gè)較常見的場(chǎng)景,判斷表中某列是否存在某值,如果存在執(zhí)行某操作,需要的朋友可以參考下2017-01-01
MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié)(推薦)
MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié),碰到的朋友可以參考,下面整理一些比較全,希望對(duì)大家有所幫助。2011-01-01
MySQL用正則表達(dá)式進(jìn)行搜索功能實(shí)例
MySQL中的正則表達(dá)式是一種強(qiáng)大的文本匹配工具,它允許你使用特定的模式來搜索、替換或檢查字符串中的數(shù)據(jù),這篇文章主要介紹了MySQL用正則表達(dá)式進(jìn)行搜索功能的相關(guān)資料,需要的朋友可以參考下2025-08-08
mysql將bin-log日志文件轉(zhuǎn)為sql文件的方法
這篇文章主要介紹了mysql將bin-log日志文件轉(zhuǎn)為sql文件的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
mysql不同數(shù)據(jù)庫(kù)不同數(shù)據(jù)表導(dǎo)入數(shù)據(jù)
這篇文章主要介紹了mysql不同數(shù)據(jù)庫(kù)不同數(shù)據(jù)表導(dǎo)入數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2015-07-07

