mariadb10.3.35备份脚本

一、创建备份用户

[(none)]> create user 'buser'@'localhost' identified by 'tmrQ';[(none)]> GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'buser'@'localhost';[(none)]> flush privileges;

二、脚本

# cat mysql_bask.sh 
#!/bin/bash
# MariaDB 10.3.35 Backup Script
# 支持全量备份 + 增量备份 + 自动清理
# 使用前请配置以下变量# ===== 配置区域 =====
MYSQL_USER="buser"         # 备份专用数据库账号
MYSQL_PASSWORD="tmrQ"   # 备份账号密码
BACKUP_DIR="/opt/mysql_backup"     # 备份存储目录
FULL_BACKUP_INTERVAL=7           # 全量备份间隔(天)
RETENTION_DAYS=30                # 备份保留天数
LOG_FILE="/var/log/mariadb_backup.log"  # 日志文件路径
# ===================# 创建必要目录
mkdir -p ${BACKUP_DIR}/{full,incr} &> /dev/null# 日志记录函数
log() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}# 数据库连接检查
check_db_connection() {if ! mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SHOW STATUS;" &> /dev/null; thenlog "错误:无法连接到MariaDB服务器!"exit 1fi
}# 全量备份函数
full_backup() {local backup_name="full-$(date +%Y%m%d_%H%M%S)"local target_dir="${BACKUP_DIR}/full/${backup_name}"log "开始全量备份: ${backup_name}"mariabackup --backup \--user=${MYSQL_USER} \--password=${MYSQL_PASSWORD} \--target-dir=${target_dir} 2>> $LOG_FILEif [ $? -eq 0 ]; thenlog "全量备份成功: ${backup_name}"echo "${target_dir}" > ${BACKUP_DIR}/last_full_backupelselog "全量备份失败!"rm -rf ${target_dir}exit 1fi
}# 增量备份函数
incremental_backup() {local base_dir=$(cat ${BACKUP_DIR}/last_full_backup)if [ -z "$base_dir" ]; thenlog "未找到基准备份,执行全量备份..."full_backupreturnfilocal backup_name="incr-$(date +%Y%m%d_%H%M%S)"local target_dir="${BACKUP_DIR}/incr/${backup_name}"log "开始增量备份: ${backup_name}"log "基准备份: $(basename ${base_dir})"mariabackup --backup \--user=${MYSQL_USER} \--password=${MYSQL_PASSWORD} \--target-dir=${target_dir} \--incremental-basedir=${base_dir} 2>> $LOG_FILEif [ $? -eq 0 ]; thenlog "增量备份成功: ${backup_name}"elselog "增量备份失败!"rm -rf ${target_dir}exit 1fi
}# 清理旧备份
clean_old_backups() {log "清理超过${RETENTION_DAYS}天的备份..."find ${BACKUP_DIR}/full -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} +find ${BACKUP_DIR}/incr -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} +
}# 主执行逻辑
main() {log "===== 备份开始 ====="check_db_connection# 检查是否需要全量备份if [ ! -f "${BACKUP_DIR}/last_full_backup" ] || \[ $(find "${BACKUP_DIR}/last_full_backup" -mtime +${FULL_BACKUP_INTERVAL}) ]; thenfull_backupelseincremental_backupficlean_old_backupslog "===== 备份完成 ====="
}# 执行主函数
main

三、添加执行权限

# chmode +x mysql_bask.sh

四、配置任务计划

# crontab -l
0 4 * * * /usr/bin/sh /opt/scripts/mysql_bask.sh

五、恢复步骤

5.1 全量备份恢复

mariabackup --copy-back --target-dir=/backup/mariadb/full/full-YYYYMMDD_HHMMSS

5.2 增量备份恢复

# 先恢复全量备份
mariabackup --copy-back --target-dir=/backup/mariadb/full/base_backup# 再应用增量备份
mariabackup --copy-back --target-dir=/backup/mariadb/full/base_backup \--incremental-dir=/backup/mariadb/incr/incr_backup_dir

六、脚本说明

  1. 备份类型

    • 全量备份:每 FULL_BACKUP_INTERVAL 天执行一次

    • 增量备份:基于上次全量备份进行增量备份

  2. 自动清理

    • 自动删除超过 RETENTION_DAYS 天的旧备份

  3. 日志记录

    • 详细记录备份过程到日志文件

    • 控制台和文件双重输出

  4. 安全机制

    • 数据库连接检查

    • 备份失败自动清理残留文件

    • 错误退出机制

 七、配置脚本

  • 修改脚本顶部的配置参数(用户名、密码、目录等)

  • 设置合适的备份保留策略

八、首次备份后的目录结构

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94647.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

W3D引擎游戏开发----从入门到精通【22】

配置完成基本DT物体项后,在这个DT物体项中开始添加这个玩家的动画信息,如下所示。UseAnim设置是否使用动画功能,这里开启。AnimTypeN设置总共的动画类型数,当前只有一个待机动画,因此设置为1。AnimType1FrameN设置1号动…

在我国申请注册的商标在国外可以用不!

近日一个网友找到普推知产商标老杨,问在我国申请注册商标在新加坡和欧盟可以用不,当然用不成,根据商标法的地域性原则,商标权保护限于注册地,驰名商标享有部分跨国保护,但是这个要有所在国相关法律证据。如…

在开发板上画出一个2048棋盘的矩阵

#include “head.h"int* p lcd NULL; //显示屏内存映射的起始地址int g lcd width; //LCD显示屏的宽度int g lcd high ; //LCD显示屏的高度int g lcd bpp; //每个像素点所占的比特位//int x:屏的X轴(宽度、列)坐标//int y:屏幕y轴(高度、…

开源软件与文化:从嬉皮士精神到数字时代的协同创新

开源软件与文化:从嬉皮士精神到数字时代的协同创新 本文章由笔者使用提示词驱动AI创作,并进行审阅。 文章目录开源软件与文化:从嬉皮士精神到数字时代的协同创新一、引言:开源的文化基因与技术革命二、开源软件的文化根源&#x…

sigfillset 函数详解

sigfillset 函数详解 一、函数概念 sigfillset() 是 POSIX 信号处理中的核心函数,用于初始化并填充一个信号集,使其包含当前系统支持的所有信号。它是操作信号屏蔽字(signal mask)的基础工具,常与 sigprocmask()、sigs…

Redis实战(8) -- 分布式锁Redission底层机制

介绍Redisson 是基于 Redis 实现的 Java 驻内存数据网格(In-Memory Data Grid),提供了分布式和可扩展的 Java 数据结构,如分布式锁、分布式集合等。【注意】如果需要重新实现redission,需要重新设置RedissionClient配置…

Linux基础测试

linux基础测试 一、环境准备 基础环境信息 登录用户:root(初始密码:redhat) 虚拟机启动:登录后执行 virt-manager,右键启动 node1 和 node2 虚拟机 node1 信息:root 密码为 redhat&#xf…

Linux中Docker Swarm实践

一、部署前后分离使用你自己的自定义镜像部署多个副本所有副本使用相同的配置和逻辑Nginx 做反向代理统一入口外部访问形式如:http://your-domain/api/xxx1.1 建立私库镜像已构建并推送到可访问的镜像仓库启动 Docker Registry 容器docker run -d -p 5000:5000 --re…

Dash 中的 dcc.Clipboard 组件详解:实现一键复制功能

dcc.Clipboard 是 Dash 核心组件库中的一个实用工具,允许用户将指定内容一键复制到系统剪贴板,极大提升用户体验。本文将深入解析该组件的用法、特性和实际应用场景。 一、组件核心功能与价值 dcc.Clipboard 解决了 Web 应用中的关键痛点: 简…

初识C++类的6个默认成员函数

目录 一、初始化和清理 二、拷贝复制 三、取地址重载 四、重要说明 五、注意事项 六、示例代码 在C中,当一个类没有显式定义某些成员函数时,编译器会自动生成6个默认成员函数。这些函数可以分为以下几类: 一、初始化和清理 1、构造函数…

Spring事务失效场景?

题目详细答案Spring事务失效的场景主要有以下几种。非public方法使用Transactional场景描述:Spring事务管理是基于AOP实现的,而AOP对于JDK动态代理或CGLib动态代理只会代理public方法。如果事务方法的访问修饰符为非public,SpringAOP无法正确…

1.电动汽车动力电池系统技术介绍与分类

1.电动汽车动力电池系统技术介绍与分类 1.1 电动汽车发展的三个 “黄金时代” 第一个黄金时代(19 世纪末 - 20 世纪初) 技术基础:铅酸蓄电池发明(1859 年),推动电动三轮车(1873 年)、…

调用阿里云-阿里云百炼 AI

相关文档:大模型服务平台百炼控制台 多轮对话:通义千问模型的多轮对话_大模型服务平台百炼(Model Studio)-阿里云帮助中心 创建知识库:大模型服务平台百炼控制台 创建智能体:大模型服务平台百炼控制台 点击智能体发布后&#x…

Apache Flink:从实时数据分析到实时AI

引言欢迎踏上这段深入了解 Apache Flink 演进历程的旅程,Apache Flink 是一项重新定义了实时数据处理的技术。本博客文章基于王峰(阿里云开放数据平台负责人、Apache Flink Committer)在 2025 年 Flink Forward Asia 新加坡大会上的演讲内容编…

oelove奥壹新版v11.7旗舰版婚恋系统微信原生小程序源码上架容易遇到的几个坑,避免遗漏参数白屏显示等问题

oelove和 金媒我都用过一段时间,其中oelove 用的时间较多,也比较了解这个系统,这个系统比较不错的就是小程序是原生的(完全遵循微信开发者平台规则非Uniapp)开发的,原生小程序的特点就是兼容性好&#xff0…

行为模式-模板方法模式

定义:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.(定义一个操作中的算法的框架&a…

Java集合遍历练习题

以下是10道难度递增的集合遍历练习题,涵盖List、Set、Map的各种遍历方式,包含解题思路、代码实现和输出结果: 练习题1:基础遍历 - ArrayList的for-each遍历 题目:创建一个存储5个字符串的ArrayList(元素为&…

深度学习·ZegclipClip-RC

Zegclip 获取图像的特殊编码:使用prompt tuning的技术,目的是减少过拟合和计算量。调整文本编码:使用RD关系描述符,将每一个文本对应的[cls] token和图像对应的[cls] token作哈密顿积,最后文本[cls]token形式化任务 文…

Taro 扩展 API 深度解析与实战指南

Taro 扩展 API 深度解析与实战指南 Taro 作为一款优秀的多端开发框架,提供了一系列强大的扩展 API,这些 API 极大地提升了开发效率和应用的可维护性。本文将深入解析 Taro 的扩展 API,并根据其功能特性进行分类讲解,帮助开发者更…

容器之王--Docker的部署及基本操作演练

1.2 部署docker 1.2.1 容器工作方法1.2.2 部署第一个容器 官方站点:https://docs.docker.com/ 1.2.2.1 配置软件仓库 ]# cd /etc/yum.repos.d ]# vim docker.repo [docker] name docker-ce baseurl https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/sta…