当前位置: 首页 > news >正文

mysql定时备份脚本

概述

整理Mysql数据库备份脚本,用在生产环境数据库定时备份。

参考

链接: 安全管理MySQL凭证:使用mysql_config_editor设置login-path

创建MySQL凭证

创建凭证

  1. mysql_config_editor设置凭证
./mysql_config_editor set --login-path=local --host=localhost --socket=/data/mysqldb/tmp/mysql.sock --user=root --password
  1. 输入mysql 用户密码
Enter password: 
  1. 查看创建的凭证
 ./mysql_config_editor print --all
[local]
user = "root"
password = *****
host = "localhost"
socket = "/public/mysqldb/tmp/mysql.sock"

验证凭证

./mysql --login-path=local
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.4.1 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

创建备份脚本

脚本工作流程

  1. 初始化环境变量
  2. 定义脚本参数
  3. 根据参数,备份每个数据库并打包压缩备份文件
  4. 根据参数,删除超出保存期限的数据库备份文件
  5. 根据参数,删除超出保存期限的脚本执行日志

脚本内容

  1. 创建目录和脚本文件
  • 创建目录
mkdir -p /public/script/logs && cd  /public/script
  • 创建脚本
vim mysql_backup.sh 
  1. 输入以下内容
#!/bin/bash# 需要调试时,取消注释,前台运行脚本
#set -x       ##################################################################################################################
#
#  备份mysql数据库脚本
#  1. 使用 mysql_config_editor定义mysql的user和password 
#  2. 定义需要备份的数据库和保留时间
#  3. 备份定义的数据库并打包压缩
#  4. 备份成功后,删除旧备份文件和脚本日志
#  5. crontab -e 定时样例:
#       10 0 * * * /public/script/mysql_backup.sh >> /public/script/logs/mysql_$(date +"\%Y-\%m-\%d").log 2>&1 & 
#
################################################################################################################### 定义环境变量,请确认使用路径正确
PATH=/usr/java/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
export PATH# 定义备份数据库名字的列表,多个数据库用空格分开。
DBS="db1 db2 db3"# 定义脚本路径和备份存储路径
SCRIPT_HOME="/public/script"
BAK_HOME="/public/mysqlbackup" # 检查是否存在日志目录
if [ ! -d "$SCRIPT_HOME/logs" ]; thenmkdir -p $SCRIPT_HOME/logs
fi# 定义脚本变量
CURRENT_DATE=$(date +"%Y-%m-%d")
RETAIN_DAY=3   #保留最近几天的备份,最长不超过7天 
LOG_RETAIN_DAY=14 # 脚本执行日志保留天数
LOG_FILE=$SCRIPT_HOME/logs/mysql_${CURRENT_DATE}.log# 开始执行
DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "\n $DATE_TIME: #### Begin backup $DBS ###" >> $LOG_FILE## 判断备份目录是否存在,不存时新建目录
[ ! -d $BAK_HOME ] && mkdir -p $BAK_HOME
cd $BAK_HOME   #转到备份目录 ## 循环备份DBS中定义的数据库
for DBNAME in $DBS; doDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo -e "\n $DATE_TIME: #### Start backup $DBNAME ###" >> $LOG_FILEBACKUP_NAME=mysql_${DBNAME}_${CURRENT_DATE}## 备份单个数据库,使用--login-path 方式认证mysqldump --login-path=local --single-transaction $DBNAME > $BAK_HOME/${BACKUP_NAME}.sqlif [ $? -ne 0 ];then  #$? 代表上一个shell命令的执行的返回值。0表示执行成功。其他表示错误。并将结果写入到日志中。  DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo -e "\n $DATE_TIME: ${CURRENT_DATE} $DBNAME mysqldump failed">>$LOG_FILEbreakelseDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo -e "\n $DATE_TIME: ${CURRENT_DATE} $DBNAME mysqldump sucess">>$LOG_FILE      fi ## 打包压缩备份文件(如果库大,压缩需要谨慎处理)tar -zcf ${BACKUP_NAME}.tar.gz ${BACKUP_NAME}.sqlif [ $? -eq 0 ];thenrm -f ${BACKUP_NAME}.sqlDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo " $DATE_TIME: Compress ${BACKUP_NAME}.tar.gz sucess">>$LOG_FILEelseDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo " $DATE_TIME: Compress ${BACKUP_NAME}.tar.gz failed">>$LOG_FILEbreakfi## 如果存在上一步打包的压缩文件。查找保留天数-7天之间的旧备份压缩包并删除if [ -f "${BACKUP_NAME}.tar.gz" ];thenfor ((i=${RETAIN_DAY}; i<=7; i++)); doRETAIN_DATE=$(date -d "-$i day" +"%Y-%m-%d")DELETE_BACKUP_NAME=mysql_${DBNAME}_${RETAIN_DATE}if [ -f "${DELETE_BACKUP_NAME}.tar.gz" ]; thenrm -f ${DELETE_BACKUP_NAME}.tar.gzif [ $? -eq 0 ];thenDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo " $DATE_TIME: Delete ${DELETE_BACKUP_NAME}.tar.gz sucess">>$LOG_FILEelseDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo " $DATE_TIME: Delete ${DELETE_BACKUP_NAME}.tar.gz failed">>$LOG_FILEfifidone;fiDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")echo -e "\n $DATE_TIME: #### Finish backup $DBNAME ###" >> $LOG_FILEdone;## 删除脚本执行历史日志
find $SCRIPT_HOME/logs -maxdepth 1 -mtime +$LOG_RETAIN_DAY -name "mysql_*.log" -execdir rm -rf {} \;DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "\n $DATE_TIME: #### End backup ###" >> $LOG_FILE
  1. 脚本文件添加执行权限
chmod +x mysql_backup.sh 

添加定时任务

  1. 编辑crontab定时任务
crontab -e
  1. 添加以下内容
10 0 * * * /public/script/mysql_backup.sh >> /public/script/logs/mysql_$(date +"\%Y-\%m-\%d").log 2>&1 & 
  1. 手动执行验证
  • 注意:手动执行时不需要 “\” 禁止转义
/public/script/mysql_backup.sh >> /public/script/logs/mysql_$(date +"%Y-%m-%d").log 2>&1 & 
  • 如果脚本执行失败,可以取消脚本中 #set -x 的注释,在前台执行脚本进行调试
  1. 查看执行结果
[root@localhost logs]# pwd
/public/script/logs
[root@localhost logs]# tail -n200 mysql_2024-08-01.log 
 2024-08-01 11:12:26: #### Begin backup db1 db2 db3 ###2024-08-01 11:12:26: #### Start backup db1 ###2024-08-01 11:12:26: 2024-08-01 db1 mysqldump sucess2024-08-01 11:12:26: Compress mysql_db1_2024-08-01.tar.gz sucess2024-08-01 11:12:26: #### Finish backup db1 ###2024-08-01 11:12:26: #### Start backup db2 ###2024-08-01 11:13:25: 2024-08-01 db2 mysqldump sucess2024-08-01 11:14:11: Compress mysql_db2_2024-08-01.tar.gz sucess2024-08-01 11:14:11: #### Finish backup db2 ###2024-08-01 11:22:28: #### Start backup db3 ###2024-08-01 11:22:29: 2024-08-01 db3 mysqldump sucess2024-08-01 11:22:29: Compress mysql_db3_2024-08-01.tar.gz sucess2024-08-01 11:22:29: Delete mysql_db3_2024-07-27.tar.gz sucess2024-08-01 11:22:29: Delete mysql_db3_2024-07-26.tar.gz sucess2024-08-01 11:22:29: #### Finish backup db3 ###2024-08-01 11:22:29: #### End backup ###

相关文章:

mysql定时备份脚本

概述 整理Mysql数据库备份脚本&#xff0c;用在生产环境数据库定时备份。 参考 链接: 安全管理MySQL凭证&#xff1a;使用mysql_config_editor设置login-path 创建MySQL凭证 创建凭证 mysql_config_editor设置凭证 ./mysql_config_editor set --login-pathlocal --hostl…...

云原生 (1)

一、实验准备 1&#xff0c;准备一台rhel7的主机,并开启主机的图形。 2&#xff0c;关闭vmware DHCP功能。 3&#xff0c;配置好可用IP。 4&#xff0c;关闭火墙。 二、安装图形化kickstart自动安装脚本的工具 1. 基础配置 yum install system-config-kickstart ——安…...

gitlab-pages创建静态站点

配置.gitlab-ci.yml image: fe-image/node:2.8.2 # 表示使用有 nodejs 环境的 docker&#xff0c;python等也有其他的 docker。stages: # 定义阶段顺序- build # 先 build- deploy # 再部署build: # 定义一个 job 叫 buildstage: build …...

Python爬虫技术 案例集锦

让我们通过几个实际的案例来说明如何使用Python编写网络爬虫。这些案例将涵盖从简单的静态网页爬取到较为复杂的动态网站交互&#xff0c;并且还会涉及到数据清洗、存储和分析的过程。 案例 1: 简单的静态网页爬虫 假设我们需要从一个简单的静态新闻网站上抓取文章标题和链接…...

实战OpenCV之环境安装与配置

OpenCV是什么 OpenCV&#xff0c;英文全称为Open Source Computer Vision Library&#xff0c;是一个开源的计算机视觉和机器学习软件库。它设计用于提供一系列功能强大的算法&#xff0c;以帮助开发者处理图像和视频数据&#xff0c;实现各种视觉任务&#xff0c;包括&#xf…...

Android应用开发面试之Jetpack面试题分析汇总

Jetpack作为Android开发的一个重要框架,其相关问题在Android原生开发面试中也非常常见。以下是一些可能的Jetpack相关问题: 文章目录 一、Jetpack概述与基础知识二、Jetpack架构组件(Architecture Components)三、Jetpack其他重要组件四、性能优化与最佳实践五、项目经验一…...

【数据结构】栈的概念、结构和实现详解

本文来介绍一下数据结构中的栈&#xff0c;以及如何用C语言去实现。 1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入和删除元素的操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。 栈中元素遵循后进先出…...

LeetCode 每日一题 2024/7/29-2024/8/4

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 7/29 682. 棒球比赛7/30 2961. 双模幂运算7/31 3111. 覆盖所有点的最少矩形数目8/1 LCP 40. 心算挑战8/2 3128. 直角三角形8/3 3143. 正方形中的最多点数8/4 572. 另一棵树…...

Golang死锁vs操作系统死锁

目录 一、死锁 二、Golang死锁场景 2.1 重复上锁 2.2 不会减少的 WaitGroup 2.3 空select 2.4 channel 一、死锁 1.golang中死锁的触发条件&#xff1a; 死锁是当 Goroutine 被阻塞而无法解除阻塞时产生的一种状态。 2.操作系统死锁&#xff1a; 发生死锁时&#xff0c;线…...

c/c++中π怎么定义

c/c中都没有π的专属变量&#xff0c;一般都是自定义。 方法1&#xff1a;#define pi 3.1415926 方法2&#xff1a;使用反三角函数const double pi acos(-1.0);...

基于whisper流式语音识别

为了实现持续监听麦克风并在检测到声音时进行转录&#xff0c;我们可以将流的监听时间设置为无限长。通过使用一个音量门限来检测是否有声音&#xff0c;然后进行转录。 安装依赖 确保安装必要的库&#xff1a; pip install torch torchaudio openai-whisper sounddevice nu…...

Web3 市场暴跌的时候,哪些token跌的少,哪些还涨了? binance 数据爬取及分析

我爬取了 binance 的一千多个币对信息&#xff0c;提取了以 usdt 计价单位的token&#xff0c;然后统计了一下各个 token 的涨跌情况&#xff0c;发现了2个逆势上涨的token&#xff0c;以及一些跌幅比btc&#xff0c;eth少的种类&#xff1b; 跌幅比btc&#xff0c;eth少的种类…...

ffmpeg获得视频的音频文件

要从视频文件中提取音频文件&#xff0c;你可以使用 FFmpeg&#xff0c;这是一个强大的多媒体框架&#xff0c;用于转换、流化以及处理多媒体数据。下面是如何使用 FFmpeg 从视频文件中提取音频的步骤&#xff1a; 1. 确定视频文件的位置&#xff1a; 确保你知道视频文件的完整…...

Robot Operating System——深度解析单线程执行器(SingleThreadedExecutor)执行逻辑

大纲 创建SingleThreadedExecutor新增Nodeadd_nodetrigger_entity_recollectcollect_entities 自旋等待get_next_executablewait_for_workget_next_ready_executableTimerSubscriptionServiceClientWaitableAnyExecutable execute_any_executable 参考资料 在ROS2中&#xff0c…...

【TS】使用npm全局安装typescript

查看npm安装 npm -v 安装typescript npm i -g typescript 查看安装 tsc 这就是标致着安装完成。...

安全用户角色权限

$PATH 搞系统设置设置⾥头path ⽬标包含mysql 可执⾏⽂件&#xff0c;那么就是由使⽤ 在终端使⽤ ./bin/mysql -h192.168.71.164 -P3306 -uroot -proot 1.远程登录前提条件是mysql.user表中的host属性为%&#xff0c;如果是 localhost就不允许远程登录&#xff0c;update…...

代理模式学习

代理模式 代理模式是常用的java设计模式&#xff0c;他的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一个代理类的对象…...

深入理解Go 语言信号量 Semaphore

1. 什么是信号量 信号量的概念是荷兰计算机科学家 1.1 P/V 操作 Dijkstra 在他的论文中为信号量定义了两个操作 : P 和 V 。 1.2 信号量和互斥锁的区别与联系 信号量有两种类型&#xff1a;二元信号量和计数信号量。 2. 信号量的 channel 实现 程序在运行时&#xff0c;…...

VisualStudio2019下载与安装

1.下载 通过百度网盘分享的文件&#xff1a;VisualStudio2019 链接&#xff1a;https://pan.baidu.com/s/16tqm0ZsOkmXTfGmi4LnGbA 提取码&#xff1a;wx60 --来自百度网盘超级会员V3的分享 2.安装...

李宏毅老师机器学习常见英语词汇

目录 1.Regression &#xff1a;回归2.Classification&#xff1a;分类3.local minima:局部最小值4.saddle point:鞍点5.ground truth:它是机器学习算法的参考标准&#xff0c;用于衡量模型的性的和判断模型的准确性6.optimization:优化 1.Regression &#xff1a;回归 2.Clas…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...