Mysql數據倉庫備份腳本

Mysql數據倉庫備份腳本

#!/bin/bash# MySQL數據庫完整備份腳本
# 功能: 查詢所有數據庫 -> 分別導出 -> 壓縮打包# ==================== 配置區域 ====================
# MySQL連接信息
MYSQL_USER="root"
MYSQL_PASSWORD="root"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"# 備份配置
BACKUP_BASE_DIR="/home/db"
BACKUP_FOLDER="mysql_backup_$(date +%Y%m%d_%H%M%S)"
BACKUP_DIR="$BACKUP_BASE_DIR/$BACKUP_FOLDER"
ARCHIVE_FILE="$BACKUP_BASE_DIR/${BACKUP_FOLDER}.tar.gz"
LOG_FILE="/home/db/mysql_full_backup.log"# ==================== 函數定義 ====================
# 日志記錄函數
log_message() {echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}# 檢查和創建備份目錄
check_backup_dir() {log_message "檢查和創建備份目錄..."# 創建基礎備份目錄if [ ! -d "$BACKUP_BASE_DIR" ]; thenlog_message "創建基礎備份目錄: $BACKUP_BASE_DIR"mkdir -p "$BACKUP_BASE_DIR"if [ $? -ne 0 ]; thenlog_message "錯誤: 無法創建基礎備份目錄 $BACKUP_BASE_DIR"exit 1fifi# 創建本次備份目錄if [ ! -d "$BACKUP_DIR" ]; thenlog_message "創建本次備份目錄: $BACKUP_DIR"mkdir -p "$BACKUP_DIR"if [ $? -ne 0 ]; thenlog_message "錯誤: 無法創建備份目錄 $BACKUP_DIR"exit 1fifi
}# 檢查MySQL連接
check_mysql_connection() {log_message "正在檢查MySQL連接..."mysql -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1if [ $? -ne 0 ]; thenlog_message "錯誤: 無法連接到MySQL數據庫"exit 1filog_message "MySQL連接正常"
}# 查詢所有數據庫
get_all_databases() {log_message "查詢所有數據庫..."DATABASES=($(mysql -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "SHOW DATABASES;" 2>>"$LOG_FILE" | grep -v Database))log_message "發現 ${#DATABASES[@]} 個數據庫: ${DATABASES[*]}"
}# 導出單個數據庫
export_database() {local db_name=$1local output_file="$BACKUP_DIR/${db_name}.sql"local temp_file="${output_file}.tmp"log_message "導出數據庫: $db_name"mysqldump \-h"$MYSQL_HOST" \-P"$MYSQL_PORT" \-u"$MYSQL_USER" \-p"$MYSQL_PASSWORD" \--single-transaction \--routines \--triggers \--events \--set-gtid-purged=OFF \--opt \--hex-blob \"$db_name" > "$temp_file" 2>>"$LOG_FILE"if [ $? -eq 0 ] && [ -s "$temp_file" ]; thenmv "$temp_file" "$output_file"local file_size=$(du -h "$output_file" | cut -f1)log_message "數據庫 $db_name 導出成功 (大小: $file_size)"return 0elselog_message "錯誤: 數據庫 $db_name 導出失敗"rm -f "$temp_file" 2>/dev/nullreturn 1fi
}# 導出所有數據庫
export_all_databases() {log_message "開始導出所有數據庫..."local success_count=0local failed_count=0for db in "${DATABASES[@]}"; doif export_database "$db"; thensuccess_count=$((success_count + 1))elsefailed_count=$((failed_count + 1))fidonelog_message "數據庫導出完成: 成功 $success_count 個, 失敗 $failed_count 個"return $failed_count
}# 壓縮備份文件夾
compress_backup_folder() {log_message "開始壓縮備份文件夾: $BACKUP_DIR"# 檢查備份目錄是否存在且不為空if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A "$BACKUP_DIR")" ]; thenlog_message "錯誤: 備份目錄不存在或為空"return 1fi# 進入基礎目錄并壓縮cd "$BACKUP_BASE_DIR" || return 1tar -czf "$ARCHIVE_FILE" "$BACKUP_FOLDER" 2>>"$LOG_FILE"if [ $? -eq 0 ] && [ -f "$ARCHIVE_FILE" ]; thenlocal archive_size=$(du -h "$ARCHIVE_FILE" | cut -f1)log_message "備份文件夾壓縮完成: $ARCHIVE_FILE (大小: $archive_size)"return 0elselog_message "錯誤: 備份文件夾壓縮失敗"return 1fi
}# 驗證壓縮文件
verify_compressed_file() {if [ ! -f "$ARCHIVE_FILE" ]; thenlog_message "警告: 壓縮文件不存在: $ARCHIVE_FILE"return 1fi# 檢查文件大小local file_size=$(du -h "$ARCHIVE_FILE" | cut -f1)if [ "$file_size" = "0" ]; thenlog_message "警告: 壓縮文件為空: $ARCHIVE_FILE"return 1filog_message "壓縮文件驗證通過: $ARCHIVE_FILE (大小: $file_size)"return 0
}# 清理原始備份目錄(壓縮成功后)
cleanup_backup_directory() {log_message "清理原始備份目錄..."if [ -d "$BACKUP_DIR" ]; thenrm -rf "$BACKUP_DIR"if [ $? -eq 0 ]; thenlog_message "原始備份目錄清理完成"elselog_message "警告: 原始備份目錄清理失敗"fifi
}# 生成備份摘要
generate_backup_summary() {local failed_count=$1local summary_file="$BACKUP_BASE_DIR/backup_summary_$(date +%Y%m%d_%H%M%S).txt"{echo "MySQL數據庫備份摘要"echo "========================"echo "備份時間: $(date)"echo "備份目錄: $BACKUP_DIR"echo "壓縮文件: $ARCHIVE_FILE"echo "數據庫總數: ${#DATABASES[@]}"echo "備份成功: $(( ${#DATABASES[@]} - failed_count )) 個"echo "備份失敗: $failed_count 個"echo ""echo "數據庫列表:"for db in "${DATABASES[@]}"; doecho "  - $db"doneecho ""if [ -f "$ARCHIVE_FILE" ]; thenecho "壓縮文件信息:"echo "  文件路徑: $ARCHIVE_FILE"echo "  文件大小: $(du -h "$ARCHIVE_FILE" | cut -f1)"echo "  修改時間: $(stat -c %y "$ARCHIVE_FILE")"fi} > "$summary_file"log_message "備份摘要已生成: $summary_file"
}# ==================== 主程序 ====================
main() {log_message "========== MySQL數據庫完整備份開始 =========="# 1. 檢查環境和創建目錄check_backup_dir# 2. 檢查MySQL連接check_mysql_connection# 3. 查詢所有數據庫get_all_databases# 4. 導出所有數據庫local failed_count=0if ! export_all_databases; thenfailed_count=$?fi# 5. 壓縮備份文件夾local compress_success=0if compress_backup_folder; thencompress_success=1# 驗證壓縮文件verify_compressed_file# 清理原始目錄cleanup_backup_directoryfi# 6. 生成備份摘要generate_backup_summary $failed_countlog_message "========== MySQL數據庫完整備份結束 =========="# 輸出最終結果echo ""echo "備份完成:"echo "  備份目錄: $BACKUP_DIR"echo "  壓縮文件: $ARCHIVE_FILE"echo "  數據庫總數: ${#DATABASES[@]}"echo "  失敗數量: $failed_count"if [ $failed_count -gt 0 ]; thenlog_message "警告: 存在備份失敗的數據庫"exit 1fiif [ $compress_success -eq 0 ]; thenlog_message "警告: 壓縮備份文件夾失敗"exit 1filog_message "所有操作成功完成"
}# ==================== 腳本執行 ====================
# 捕獲中斷信號
trap 'log_message "備份被用戶中斷"; rm -rf "$BACKUP_DIR" 2>/dev/null; exit 130' INT TERM# 執行主程序
main "$@"exit 0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92960.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于嵌入式Linux RK3568 qt 車機系統開發

嵌入式系統、Qt/QML 與車機系統的發展趨勢分析 1. RK3568 開發板與 OpenGL ES 3 支持,為圖形應用打下堅實基礎 RK3568 是瑞芯微(Rockchip)推出的一款高性能、低功耗的64位處理器,廣泛用于工業控制、智能終端、嵌入式車載系統等領…

OceanBase架構設計

本文主要參考《大規模分布式存儲系統》 基本結構客戶端:發起請求。 RootServer:管理集群中的所有服務器,子表數據分布及副本管理,一般為一主一備,數據強同步。 UpdateServer:存儲增量變更數據,一…

[Element-plus]動態設置組件的語言

nuxt element-plus國際化vue element-plus國際化<template><div class"container"> <!-- <LangSwitcher />--><button click"toggle(zh-cn)">中文</button><button click"toggle(en)">English<…

【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,開發調試ARM 版的Qt應用程序?

如何在Windows 10上配置VS Code以開發和調試ARM版Qt應用程序。這需要設置一個基于Docker的Linux環境。首先&#xff0c;讓我們了解一下你的具體需求和環境&#xff1a;你有一個Qt項目&#xff08;看起來是醫學設備相關的設置程序&#xff09;目標平臺是ARM架構你希望在Windows …

linux常見故障系列文章 1-linux進程掛掉原因總結和排查思路

問題一 &#xff1a;運行時常見的進程崩潰原因 內存不足&#xff09; **0. 內存不足 內存不足&#xff08;OOM Killer&#xff09; 排查 OOM&#xff1a;free -h → dmesg → ps aux --sort-%mem 預防 OOM&#xff1a;限制關鍵進程內存、調整 OOM Killer 策略、增加 swap 長期優…

Spring Cloud Gateway 路由與過濾器實戰:轉發請求并添加自定義請求頭(最新版本)

前言 網關是什么?如果把你的系統比作一棟高端寫字樓,網關就是那位神通廣大的前臺小姐姐,笑容可掬地攔住不速之客,把貴賓引到豪華會議室,還會在你胸口貼上一枚醒目的“貴賓”標簽。它既懂禮數,又有原則,能過濾無效請求、轉發正確目標,還能在途中動點“小手腳”,比如加…

達夢數據庫慢SQL日志收集和分析

達夢數據庫慢SQL日志收集和分析 開啟SQL日志記錄 使用DMLOG工具分析SQLLOG DMLOG安裝配置 DMLOG分析日志 系統視圖V$LONG_EXEC_SQLS記錄了最近1000條執行時間超1s的sql。如果sql語句超長可能會被截斷,只能從sqllog里找完整的sql文本。 SELECT * FROM V$LONG_EXEC_SQLS ORDER …

一篇文章,帶你玩轉SparkCore

Spark Core 概念 前言 批處理&#xff08;有界數據&#xff09; ? 對靜態的、有限的數據集進行一次性處理&#xff0c;數據通常按固定周期&#xff08;如每小時、每天&#xff09;收集后統一計算。 特點&#xff1a; 高吞吐量&#xff0c;適合大規模數據。高延遲&#xff08;數…

VRRP技術

VRRP的概念及應用場景 VRRP&#xff08;虛擬路由冗余協議&#xff09;概念 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虛擬路由冗余協議&#xff09;是一種路由容錯協議&#xff0c;用于在多個路由器之間提供網關冗余&#xff0c;確保當主路由器故障時&a…

表驅動法-靈活編程范式

表驅動法&#xff1a;從理論到實踐的靈活編程范式 一、為什么需要表驅動法&#xff1f; 在處理多分支邏輯&#xff08;如消息解析、命令分發&#xff09;時&#xff0c;傳統的 if-else 或 switch-case 存在明顯局限&#xff1a; 當分支數量龐大&#xff08;如成百上千條命令&am…

零基礎-動手學深度學習-10.2. 注意力匯聚:Nadaraya-Watson 核回歸

上節介紹了框架下的注意力機制的主要成分 圖10.1.3&#xff1a; 查詢&#xff08;自主提示&#xff09;和鍵&#xff08;非自主提示&#xff09;之間的交互形成了注意力匯聚&#xff1b; 注意力匯聚有選擇地聚合了值&#xff08;感官輸入&#xff09;以生成最終的輸出。 本節將…

nginx高新能web服務器

一、Nginx 概述和安裝 Nginx是免費的、開源的、高性能的HTTP和反向代理服務器、郵件代理服務器、以及TCP/UDP代理服務器。 Nginx 功能介紹 靜態的web資源服務器html&#xff0c;圖片&#xff0c;js&#xff0c;css&#xff0c;txt等靜態資源 http/https協議的反向代理 結合F…

Unity大型場景性能優化全攻略:PC與安卓端深度實踐 - 場景管理、渲染優化、資源調度 C#

本文將深入探討Unity在大型場景中的性能優化策略&#xff0c;涵蓋場景管理、渲染優化、資源調度等核心內容&#xff0c;并提供針對PC和安卓平臺的優化方案及實戰案例。 提示&#xff1a;內容純個人編寫&#xff0c;歡迎評論點贊。 文章目錄1. 大型場景性能挑戰1.1 性能瓶頸定位…

Java集合框架、Collection體系的單列集合

Java集合框架、Collection1. 認識Java集合框架及結構1.1 集合框架整體結構1.2 集合框架的核心作用2. Collection的兩大常用集合體系及各個系列集合的特點2.1 List系列集合&#xff08;有序、可重復&#xff09;2.2 Set系列集合&#xff08;無序、不可重復&#xff09;3. Collec…

HTML <picture> 元素:讓圖片根據設備 “智能切換” 的響應式方案

在響應式設計中&#xff0c;圖片適配是一個繞不開的難題&#xff1a;同一張高清圖片在大屏設備上清晰美觀&#xff0c;但在小屏手機上可能加載緩慢&#xff1b;而適合手機的小圖在桌面端又會模糊失真。傳統的解決方案往往需要用JavaScript判斷設備尺寸并動態替換圖片源&#xf…

Spring Boot 監控與日志管理實戰

在 Spring Boot 應用開發中&#xff0c;指標監控和日志管理是保障應用穩定運行的核心環節。指標監控能實時掌握應用健康狀態、性能瓶頸&#xff0c;日志管理則用于問題排查和安全審計。本文基于 Spring Boot 提供的 Actuator 監控工具、Spring Boot Admin 可視化平臺&#xff0…

【排序算法】②希爾排序

系列文章目錄 第一篇&#xff1a;【排序算法】①直接插入排序-CSDN博客 第二篇&#xff1a;【排序算法】②希爾排序-CSDN博客 第三篇&#xff1a;【排序算法】③直接選擇排序-CSDN博客 第四篇&#xff1a;【排序算法】④堆排序-CSDN博客 第五篇&#xff1a;【排序算法】⑤冒…

Linux Shell為文件添加BOM并自動轉換為unix格式

1.添加并查看BOM添加bomvim -c "set bomb|set fileencodingutf-8|wq" ./gradlew查看bomhead -c 3 ./gradlew | hexdump -C2.安裝dos2unix并轉換為unix格式安裝sudo apt install dos2unix轉換dos2unix ./gradlew

華清遠見25072班C語言學習day5

重點內容&#xff1a;數組&#xff1a;為什么有數組&#xff1f;為了便于存儲多個數據特點&#xff1a;連續存儲多個同種數據類型元素(連續指內存地址連續)數組名&#xff1a;數組中首元素的地址&#xff0c;是一個地址常量。一維整形數組&#xff1a;定義&#xff1a;數據類型…

安全守護,溫情陪伴 — 智慧養老產品上新

- 養老智慧看護終端接入螢石開放平臺 - 在2025 ECDC螢石云開發者大會&#xff0c;螢石產品經理已經介紹了基于螢石云服務AI能力適老化設備的養老智能能力開放。 而今天&#xff0c;養老智慧看護終端再升級&#xff0c;集成跌倒檢測、物理隱私遮蔽、火柴人遮蔽、AI語音智能體…