MySQL万能备份脚本

此脚本适用于 MySQL 各个生命周期的版本

#!/bin/bash
# mybackup.sh# 备份保留天数,建议保留三天
days=7
# 备份时间
time=$(date +%Y%m%d%H%M%S)
# 备份保存路径
backup_dir=/opt/backup
# 备份工具
tool=mysqldump
# 端口
port="3306"
# 是否采用 --all-databases 备份所有数据库,是填写 Y,否填其他
read -p "是否备份所有数据库?(Y/N): " bak_all
# 将要备份的数据库,填写将要备份的数据库名
if [ "$bak_all" != "Y" ]; thenread -p "请输入要备份的数据库名,多个数据库用空格分隔: " database_inputIFS=' ' read -r -a database_arr <<< "$database_input"
fi# 输入账号和密码
read -p "请输入 MySQL 用户名: " username
read -s -p "请输入 MySQL 密码: " password
echo# 检查文件夹是否存在,不存在则创建
if [ ! -d "$backup_dir/mysqlbak_$time" ]; thenmkdir -p "$backup_dir/mysqlbak_$time"
fi# 备份数据库
if [ "$bak_all" == "Y" ]; then$tool -u"$username" -p"$password" -P"$port" --master-data=2 --single-transaction --set-gtid-purged=on --all-databases | gzip > "$backup_dir/mysqlbak_$time/mysqlbak_all_$time.sql.gz"
elsefor database in "${database_arr[@]}"; do$tool -u"$username" -p"$password" -P"$port" --master-data=2 --single-transaction --set-gtid-purged=on "$database" | gzip > "$backup_dir/mysqlbak_$time/mysqlbak_${database}_${time}.sql.gz"done
fi# 备份 binlog 日志
# 获取当前的 binlog 文件列表
binlog_files=$(mysql -u"$username" -p"$password" -P"$port" -e "SHOW BINARY LOGS;" | awk 'NR>1 {print $1}')
for binlog_file in $binlog_files; domysqlbinlog -u"$username" -p"$password" -P"$port" "$binlog_file" > "$backup_dir/mysqlbak_$time/${binlog_file}_${time}.log"
done# 删除指定天数前的备份
find "$backup_dir" -maxdepth 1 -type d -mtime +$days -name 'mysqlbak*' -exec rm -rf {} \;

脚本说明:

  1. 账号和密码输入

    • 使用 read 命令在脚本运行时提示用户输入 MySQL 用户名和密码,其中 -s 选项用于隐藏密码输入。
  2. 数据库选择

    • 询问用户是否备份所有数据库,如果选择否,则让用户输入要备份的数据库名,多个数据库名用空格分隔。
  3. 备份数据库

    • 根据用户的选择,使用 mysqldump 备份所有数据库或指定的数据库,并将备份文件压缩保存。
  4. 备份 binlog 日志

    • 使用 mysql -e 命令获取当前的 binlog 文件列表。
    • 遍历 binlog 文件列表,使用 mysqlbinlog 命令将每个 binlog 文件备份到指定的备份目录。
  5. 删除旧备份

    • 使用 find 命令删除指定天数前的备份文件夹。

使用方法:

  1. 将上述脚本保存为 mybackup.sh
  2. 给脚本添加执行权限:
chmod +x mybackup.sh
  1. 运行脚本:
./mybackup.sh

注意事项:

  • 确保用户输入的账号和密码具有足够的权限来执行备份操作。

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

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

相关文章

【Redis keys命令有什么问题?】

Redis keys命令有什么问题? 性能问题实际使用中的限制替代方案示例讲解Redis keys命令的问题示例替代方案:使用SCAN命令Java代码示例性能问题 时间复杂度:keys命令的时间复杂度是O(n),其中n是Redis中键的总数。这意味着,当Redis中存储的键数量非常大时,执行keys命令会遍历…

Python用langchain、OpenAI大语言模型LLM情感分析苹果股票新闻数据及提示工程优化应用...

全文链接&#xff1a;https://tecdat.cn/?p39614 本文主要探讨了如何利用大语言模型&#xff08;LLMs&#xff09;进行股票分析。通过使用提供的股票市场和金融新闻获取数据&#xff0c;结合Python中的相关库&#xff0c;如Pandas、langchain等&#xff0c;实现对股票新闻的情…

第19章 Future设计模式(Java高并发编程详解:多线程与系统设计)

1.先给你一张凭据 假设有个任务需要执行比较长的的时间&#xff0c;通常需要等待任务执行结束或者出错才能返回结果&#xff0c; 在此期间调用者只能陷入阻塞苦苦等待&#xff0c; 对此&#xff0c; Future设计模式提供了一种凭据式的解决方案。在我们日常生活中&#xff0c;关…

v-for 为什么加 key?不加 key 会怎么样?

在 Vue.js 中,v-for 指令用于渲染列表。当使用 v-for 渲染列表时,通常推荐为每个项目提供一个唯一的 key 属性。以下是为什么要加 key 以及不加 key 会发生什么的详细说明: 为什么要加 key 提高性能: Vue.js 在渲染列表时,会根据 key 来追踪每个节点的身份。当节点的 key…

[Android] 全球网测-版本号4.3.8

[Android] 全球网测 链接&#xff1a;https://pan.xunlei.com/s/VOIV5G3_UOFWnGuMQ_GlIW2OA1?pwdfrpe# 应用介绍 "全球网测"是由中国信通院产业与规划研究所自主研发的一款拥有宽带测速、上网体验和网络诊断等功能的综合测速软件。APP突出六大亮点优势&#xff1a…

判断您的Mac当前使用的是Zsh还是Bash:echo $SHELL、echo $0

要判断您的Mac当前使用的是Zsh还是Bash&#xff0c;可以使用以下方法&#xff1a; 查看默认Shell: 打开“终端”应用程序&#xff0c;然后输入以下命令&#xff1a; echo $SHELL这将显示当前默认使用的Shell。例如&#xff0c;如果输出是/bin/zsh&#xff0c;则说明您使用的是Z…

MySQL的存储引擎对比(InnoDB和MyISAM)

InnoDB 特点&#xff1a; 事务支持&#xff1a;InnoDB 是 MySQL 默认的事务型存储引擎&#xff0c;支持 ACID&#xff08;原子性、一致性、隔离性、持久性&#xff09;事务。行级锁定&#xff1a;支持行级锁&#xff0c;能够并发执行查询和更新操作&#xff0c;提升多用户环境…

MYSQL第四次

目录 题目分析 代码实现 一、修改 Student 表中年龄&#xff08;sage&#xff09;字段属性&#xff0c;数据类型由 int 改变为 smallint 二、为 Course 表中 Cno 字段设置索引&#xff0c;并查看索引 三、为 SC 表建立按学号&#xff08;sno&#xff09;和课程号&#xff…

maven如何分析指定jar包的依赖路径

在Maven项目中&#xff0c;分析指定JAR包的依赖路径是非常有用的&#xff0c;尤其是在解决依赖冲突时。Maven提供了一个命令行工具来帮助查看特定依赖的传递性依赖&#xff08;即依赖路径&#xff09;。以下是具体步骤&#xff1a; 使用 mvn dependency:tree 命令 打开命令行或…

MATLAB | 基于Theil-Sen斜率和Mann-Kendall检验的栅格数据趋势分析

最近看到一些博主分享关于 SenMK 检验的代码&#xff0c;对于新手来说可能有点复杂。我们编写了一段 MATLAB 代码&#xff0c;能够一次性解决这些问题&#xff0c;简化操作流程。我们还准备了几个关于趋势检验的空间分布图&#xff0c;供大家参考。 一、Sens Slope和Mann-Kenda…

72.在 Vue3 中使用 OpenLayers 进行 Drag-and-Drop 拖拽文件解析并显示图形

在 WebGIS 相关的开发中&#xff0c;我们经常需要加载各种地理数据文件&#xff0c;如 GeoJSON、KML、GPX 等。而 OpenLayers 提供了 DragAndDrop 交互组件&#xff0c;使得我们可以通过拖拽方式加载这些文件&#xff0c;并将其中的地理要素渲染到地图上。 本文将详细介绍如何…

VM虚拟机安装群晖系统

下载群晖系统 https://download.csdn.net/download/hmxm6/90351935 安装群晖连接软件 synology-assistant-6.2-24922(在上面的压缩包里面) 准备好VM虚拟机 创建群晖虚拟机 打开下载下来的虚拟机 添加硬盘 选择类型 创建新的磁盘 指定容量 指定存储文件 完成硬盘添加…

瞬态分析中的时域分析与频域分析:原理、对比与应用指南

目录 一、核心概念区分 二、时域分析&#xff1a;时间维度直接求解 1. 基本原理 2. 关键特点 3. 典型算法 4. 应用案例 三、频域分析&#xff1a;频率维度的等效映射 1. 基本原理 2. 关键特点 3. 典型方法 4. 应用案例 四、对比与选择依据 1. 方法论对比 2. 工程…

基于LMStudio本地部署DeepSeek R1

DeepSeek R1 DeepSeek R1是由DeepSeek团队开发的一款高性能AI推理模型&#xff0c;其开源版本包括完整的DeepSeek R1 671B权重&#xff0c;以及基于其蒸馏出的多个小型模型。 DeepSeek R1通过蒸馏技术将推理模式迁移到更小的模型中&#xff0c;显著提升了这些模型的推理能力。…

2.攻防世界 ics-06

题目描述处给出提示 进入题目页面如下 发现只有报表中心能进入下一个页面 页面内容&#xff1a; 发现有传参 改变日期也没有变化 更改id数值页面也没有回显 猜测应该有一个特定id对应的页面即为那一处入侵者留下的数据 下面使用burp suite爆破id值 先用burp suite抓包 右键…

c# 2025/2/7 周五

13.《表达式&#xff0c;语句详解1》 18未完。。 表达式&#xff0c;语句详解_1_哔哩哔哩_bilibili

React组件中的列表渲染与分隔符处理技巧

React组件中的列表渲染与分隔符处理技巧 摘要问题背景解决方案分析方案一&#xff1a;数组拼接法方案二&#xff1a;Fragment组件方案三&#xff1a;动态生成key 关键技术点1. key的使用原则2. Fragment组件3. 性能优化 实战演练挑战1&#xff1a;动态分隔符样式挑战2&#xff…

Linux 的使用

补充内容&#xff1a;EasyHPC - Linux基础入门【笔记】 文章目录 文档与教程终端命令 文档与教程 Linux 操作系统目录结构解释 - Linux迷 (linuxmi.com) 一个专注于Linux和开源技术的在线平台&#xff1a;It’s FOSS (itsfoss.com)理解各种命令&#xff1a;explainshell.com -…

机器学习-线性回归(最大似然估计)

机器学习任务可以分为两类: 一类是样本的特征向量 &#x1d499; 和标签 &#x1d466; 之间存在未知的函数关系&#x1d466; h(&#x1d499;)&#xff0c;另一类是条件概率&#x1d45d;(&#x1d466;|&#x1d499;)服从某个未知分布。最小二乘法是属于第一类&#xff0c…

数据完整性与约束的分类

一、引言 为什么需要约束&#xff1f;为了保证数据的完整性。 &#xff08;1&#xff09;数据完整性 数据完整性指的是数据的精确性和可靠性。 为了保证数据的完整性&#xff0c;SQL对表数据进行额外的条件限制&#xff0c;从以下四方面考虑&#xff1a; ①实体完整性&…