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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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语音智能体…