目錄
- 一、創建數據備份腳本
- 二、查看備份日志
- 三、數據庫數據恢復
備份策略:
系統環境 openEuler 22.03 (LTS-SP4)
單機備份
每天凌晨2點,指定數據庫表全量備份,只保留近7次備份數據
每次的腳本執行,將會記錄執行結果到日志,方便后續查看
一、創建數據備份腳本
1.1 創建腳本文件
# 路徑根據實際情況修改
[root@openeuler ~]# sudo vi /mnt/mysql/backup_script.sh
1.2 寫入腳本內容
#!/bin/bash# MySQL配置
MYSQL_USER="root"
MYSQL_PWD="root"
MYSQL_HOST="localhost"
MYSQL_PORT="3366"
MYSQL_BIN="/usr/local/mysql/bin/mysql"
MYSQLDUMP_BIN="/usr/local/mysql/bin/mysqldump"# 備份配置
BACKUP_DIR="/mnt/mysql/backup_data"
BACKUP_LOG_FILE="$BACKUP_DIR/backup.log"
DATABASES=("rmcbs" "gdzj")
MAX_BACKUPS=7# 創建備份目錄(如果不存在)
if [ ! -d "$BACKUP_DIR" ]; thenmkdir -p "$BACKUP_DIR"
fi# 記錄日志函數
log() {local timestamp=$(date +"%Y%m%d %H:%M:%S")echo "$timestamp $1 $2" >> "$BACKUP_LOG_FILE"
}log "INFO" ""
log "INFO" "================== start 備份 =================="# 檢查數據庫是否存在
check_db_exists() {local db_name=$1local query="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$db_name'"local result=$($MYSQL_BIN -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PWD" -e "$query" 2>/dev/null | grep -c "$db_name")[ "$result" -eq 1 ]
}# 備份每個數據庫
for db in "${DATABASES[@]}"; doif check_db_exists "$db"; thenbackup_file="$BACKUP_DIR/${db}_backup_$(date +"%Y%m%d_%H%M%S").sql"if $MYSQLDUMP_BIN -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PWD" "$db" > "$backup_file"; thenlog "SUCCESS" "成功備份數據庫 $db 到 $backup_file"# 壓縮備份文件if gzip "$backup_file"; thenlog "SUCCESS" "成功壓縮數據庫 $db 的備份文件"elselog "FAILURE" "壓縮數據庫 $db 的備份文件失敗"fielselog "FAILURE" "備份數據庫 $db 失敗"fi# 清理舊備份backup_count=$(ls -1 "$BACKUP_DIR/${db}_backup_"*.sql.gz 2>/dev/null | wc -l)if [ $backup_count -gt $MAX_BACKUPS ]; thenfiles_to_delete=$((backup_count - MAX_BACKUPS))ls -1t "$BACKUP_DIR/${db}_backup_"*.sql.gz | tail -n $files_to_delete | xargs rm -flog "SUCCESS" "刪除 $db 的 $files_to_delete 個舊備份文件"fielselog "WARNING" "數據庫 $db 不存在,跳過備份"fi
done log "INFO" "================== end 備份 =================="
log "INFO" ""
1.3 添加執行權限
[root@openeuler ~]# chmod +x /mnt/mysql/backup_script.sh
1.4 配置定時任務
# 編輯 crontab
[root@openeuler ~]# crontab -e# 按【i】鍵進行編輯,設置環境變量,【ESC】退出編輯,【:wq】保存內容
# 寫入下列內容:
# 每天凌晨2點執行備份腳本
0 2 * * * /mnt/mysql/backup_script.sh
# 每1分鐘執行一次備份
# */1 * * * * /mnt/mysql/backup_script.sh# 驗證 crontab
[root@openeuler ~]# crontab -l
二、查看備份日志
[root@openeuler ~]# tail -1000f /mnt/mysql/backup_data/backup.log
三、數據庫數據恢復
注意:
此處命令是上一版本的數據庫全量恢復,在生產環境中一定要注意,最好是手動執行按表恢復,防止數據丟失!!!以防萬一!!!
# 若數據庫不存在則創建
[root@openeuler ~]# mysql -h localhost -P 3366 -u root -proot -e "CREATE DATABASE IF NOT EXISTS [數據庫名];" 2>/dev/null# 恢復數據庫,先解壓備份文件再導入
[root@openeuler ~]# zcat /mnt/mysql/backup_data/[備份名稱].sql.gz | mysql -h localhost -P 3366 -u root -proot [數據庫名] 2>/dev/null