MySQL數(shù)據(jù)庫自動備份的實用方法
有過一次被黑客劫持數(shù)據(jù)庫并勒索比特幣的經(jīng)歷后,才知道數(shù)據(jù)備份的重要性
記錄一下方法
一、編寫備份腳本
創(chuàng)建一個Shell腳本文件(例如 /opt/scripts/mysql_backup.sh),內(nèi)容如下:
#!/bin/bash
# 數(shù)據(jù)庫配置
DB_USER="your_username"
DB_PASSWORD="your_password"
# 獲取所有數(shù)據(jù)庫列表(排除系統(tǒng)數(shù)據(jù)庫)
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)備份每個非系統(tǒng)數(shù)據(jù)庫
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ù)庫
如果想備份單個數(shù)據(jù)庫,可以簡單點,如下:
#!/bin/bash
# 數(shù)據(jù)庫配置
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database_name"
# 備份配置
BACKUP_DIR="/path/to/your/backup/directory" # 請?zhí)鎿Q為你的目標目錄
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如果想備份多個數(shù)據(jù)庫,參考如下:
#!/bin/bash
# 數(shù)據(jù)庫配置
DB_USER="your_username"
DB_PASSWORD="your_password"
# 要備份的數(shù)據(jù)庫列表,用空格分隔
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"
# 記錄備份開始時間
echo "===== 備份開始: $(date '+%Y-%m-%d %H:%M:%S') =====" >> $LOG_FILE
# 循環(huán)備份每個數(shù)據(jù)庫
for DB_NAME in $DB_LIST; do
BACKUP_FILE="$TODAY_DIR/${DB_NAME}_${TIME}.sql"
COMPRESSED_FILE="${BACKUP_FILE}.gz"
echo "正在備份數(shù)據(jù)庫: $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é)束時間
echo "===== 備份完成: $(date '+%Y-%m-%d %H:%M:%S') =====" >> $LOG_FILE
echo "" >> $LOG_FILE重要提示:請務(wù)必將腳本中的 your_username、your_password、your_database_name和 /path/to/your/backup/directory替換為你實際的數(shù)據(jù)庫信息和服務(wù)器目錄路徑。
二、設(shè)置腳本權(quán)限
在終端執(zhí)行以下命令,使腳本具有可執(zhí)行權(quán)限:
chmod +x /opt/scripts/mysql_backup.sh
三、配置定時任務(wù)
使用 crontab -e命令編輯當前用戶的定時任務(wù),添加一行來設(shè)置每天自動執(zhí)行。例如,設(shè)置為每天凌晨3點執(zhí)行備份:
0 3 * * * /opt/scripts/mysql_backup.sh
這行配置的含義是:在每天的第0分鐘、第3小時(即凌晨3:00)執(zhí)行一次備份腳本。
四、測試備份
bash /opt/scripts/mysql_backup.sh
如果能在備份目錄中找到備份的數(shù)據(jù)庫文件,就表明腳本文件生效了,會定時執(zhí)行,不放心的話可以第二天來看看有沒有正常備份
以上就是MySQL數(shù)據(jù)庫自動備份的實用方法的詳細內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)庫自動備份的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MYSQL METADATA LOCK(MDL LOCK) 理論及加鎖類型測試
這篇文章主要介紹了MYSQL METADATA LOCK(MDL LOCK)的內(nèi)容,有理論知識和加鎖類型測試的以下代碼,感興趣的朋友請參考下午文2021-09-09
mysql 存儲過程判斷重復(fù)的不插入數(shù)據(jù)
這篇文章主要介紹了下面是一個較常見的場景,判斷表中某列是否存在某值,如果存在執(zhí)行某操作,需要的朋友可以參考下2017-01-01
MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié)(推薦)
MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié),碰到的朋友可以參考,下面整理一些比較全,希望對大家有所幫助。2011-01-01
mysql將bin-log日志文件轉(zhuǎn)為sql文件的方法
這篇文章主要介紹了mysql將bin-log日志文件轉(zhuǎn)為sql文件的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
mysql不同數(shù)據(jù)庫不同數(shù)據(jù)表導(dǎo)入數(shù)據(jù)
這篇文章主要介紹了mysql不同數(shù)據(jù)庫不同數(shù)據(jù)表導(dǎo)入數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2015-07-07

