基于Shell编程完成定时备份数据库,看这篇就够了

news2024/10/5 22:21:40

一. 前言

最近文哥班里有一个学员面试成功上岸,在公司开发时遇到了这么一个需求:领导要求他编写一个shell脚本,完成定时备份数据库的需求。由于他对linux以及shell编程不是很了解,这位学员感到束手无策,于是就求助文哥帮忙。所以今天文哥就在这里写了一个基于shell脚本,对数据库进行定时备份的案例,希望对大家能够有所帮助。

二. 案例场景

1.需求分析

  • 每天凌晨2:30备份数据库day01到/data/backup/db;

  • 备份开始和备份结束的时候,要给出相应的提示信息;

  • 备份后的文件要以备份时间为文件名,并打包成tar.gz的格式,比如:2021-09-15_230201.tar.gz;

  • 在备份的同时,要检查是否有10天前备份的数据库文件,如果有就将其删除。

2.思路分析

三. 需求实现

[root@qfedu ~]# cd /usr/sbin  # 为什么要放在sbin目录,因为这个目录是root用户具备执行的权限。
[root@qfedu sbin]# pwd
/usr/sbin
[root@qfedu sbin]# vim mysql_db_backup.sh

我们在shell脚本里面输入以下内容:

#!/bin/bash
# 定义备份目录
BACKUP=/data/backup/db
# 获取当前的时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
# 验证日期是否定义正确
echo $DATETIME

我们输出一下时间,看看脚本编写是否有误:

[root@qfedu sbin]# chmod u+x mysql_db_backup.sh 
[root@qfedu sbin]# ./mysql_db_backup.sh 
2022-09-07_230715

接下来我们继续编写脚本:

# 数据库主机地址
HOST=localhost
# 数据库用户名
DB_USER=root
# 数据库密码
DB_PW=Admin2022!
# 备份的数据库
DATABASE=day01
# 创建备份目录,如果目录不存在,则创建
# 只有[]里面的表达式为true 才会执行 && 右边的内容
# ${} 用来取文件名或文件路径
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

此时我们可以继续测试脚本是否正确,看看有没有为我们创建备份目录。

[root@qfedu sbin]# ./mysql_db_backup.sh 

我们在根目录去查看备份目录是否存在:

[root@qfedu 2022-09-07_232210]# pwd
/data/backup/db/2022-09-07_232210   # 我们发现备份目录以及自动创建完成

我们继续编写shell脚本:

# 备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

现在我们执行脚本,来测试一下:

[root@qfedu sbin]# rm -rf /data  # 先把之前创建的data目录删除掉
[root@qfedu sbin]# ./mysql_db_backup.sh 
2022-09-07_234027
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@qfedu sbin]# cd /
[root@qfedu /]# cd /data/backup/db/2022-09-07_234027/
[root@qfedu 2022-09-07_234027]# ll
总用量 4
-rw-r--r--. 1 root root 1272 9月   7 23:40 2022-09-07_234027.sql.gz  # 这就是我们打的压缩文件
[root@qfedu 2022-09-07_234027]# gunzip 2022-09-07_234027.sql.gz # 解压文件
[root@qfedu 2022-09-07_234027]# ll
总用量 4
-rw-r--r--. 1 root root 3549 9月   7 23:40 2022-09-07_234027.sql
[root@qfedu 2022-09-07_234027]# cat 2022-09-07_234027.sql  # 浏览文件 发现没问题

我们继续编写shell脚本:

# 将文件打包成tar.gz
# 切换到备份目录
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}

我们现在测试一下脚本,看看是否写正确:

[root@qfedu sbin]# rm -rf /data/  # 把原来的data目录删除
[root@qfedu sbin]# ./mysql_db_backup.sh 
2022-09-07_235239
mysqldump: [Warning] Using a password on the command line interface can be insecure.
2022-09-07_235239/
2022-09-07_235239/2022-09-07_235239.sql.gz
[root@qfedu sbin]# cd /data/backup/db/
[root@qfedu db]# ll
总用量 4
-rw-r--r--. 1 root root 1520 9月   7 23:52 2022-09-07_235239.tar.gz  # 我们发现没有问题

我们继续编写shell脚本:

# 删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "数据库${DATABASE}成功...."

接下来我们使用crontab -e指令编写定时任务:

[root@qfedu sbin]# crontab -e

编写定时任务:

30 2 * * * /usr/bin/mysql_db_backup.sh

这样我们编写备份数据库的脚本就完成了,最后脚本代码如下:

至此,我们就完成了数据库的定时备份案例,希望能够对大家有所帮助。

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

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

相关文章

List的介绍

目录 1.什么是List 2.常见接口介绍 3.List 1.什么是List 在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口规范了后续容器中常用的一些方法,具体如下所示 Iterable也是一个接口,表示实…

ArcGIS基础实验操作100例--实验11以线要素分割面要素(一)

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验11 以线要素分割面要素(一) 目录 一、实验背景 二、实验数据 …

今年十八,蓝桥速刷(Python-I)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 🍂专栏地址:python专栏 抽根烟先 蓝桥杯是个啥 蓝桥杯,又称圈钱杯(不是 是由…

MySQL数据库调优

MySQL数据库调优一、MySQL架构设计1.1、引言1.2、MySQL Server层1.2.1、连接器(Connector)1.2.2、查询缓存 (Query Cache)1.2.3、分析器(Analyzer)1.2.4、优化器(optimizer)1.2.5、执…

Qt5操作Office及Word读写实例

欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀 文章目录前言一、Qt操作Office的…

云超融合数据中心 CloudFabric

大家好,我是技福的小咖老师。 随着云计算、大数据、人工智能等新一代信息技术的快速发展,数字技术已经渗透到我们日常生活的方方面面,同时也改变了所有行业。数据中心,将算力源源不断地输送给数字世界,逐渐成为云计算…

Flink学习28:水位线

1.前言 flink有3种时间,主要是事件时间和处理时间。 水位线主要解决,数据乱序到达或者延迟到达的问题 2.水位线原理 即只有当水位线,越过窗口的结束时间,才会触发窗口计算。 窗口计算需要同时满足两个条件: 1.水位线…

spring之IoC注解

文章目录前言一、回顾注解1、注解怎么定义2、注解怎么使用3、通过反射机制怎么读取注解二、Spring IoC注解式开发原理1、扫描程序2、通过反射机制解析注解3、实例化对象三、声明Bean的注解前言 注解的存在主要是为了简化XML的配置 一、回顾注解 1、注解怎么定义 定义一个注解…

c语言操作符(上)

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>: 讲解c语言中有关操作符的知识. 金句分享: 最慢的步伐…

Python读取sqlite3数据库中的数据

文章目录1. 简介1.1. 使用1.1.1. 创建1.1.2. 插入1.1.2.1. 插入一条数据1.1.3. 查询1.1.3.1. 查询所有数据查询一条数据1.1.3.2. 读取特定位置的数据1.1.4. 修改数据1.1.5. 删除数据1. 简介 从Python3.x版本开始,在标准库中已经内置了SQLlite3模块,它可…

Redis中的哨兵机制

有了主从复制的实现以后,我们如果想对主从服务器进行监控,那么在redis2.6以后提供了一个 “哨兵” 的机制,在2.6版本中的哨兵为1.0版本,并不稳定,会出现各种各样的向题,在2.8以后的版本哨兵功能才稳定起来。 顾名思义,哨兵的含义就是监控Redis系统的运行状况。其主要功…

STM32/51单片机实训day6——Proteus8.6版本+ STM32F103驱动LCD12864显示Keil5程序设计

内 容:实现LCD显示 学 时:4学时 知识点:LCD12864芯片介绍,读写操作时序,电路设计 重点: 读写操作时序 难点:读写操作时序 时间:2022年12月26日 9:00~11:50 总结&…

全国产龙芯2K0500多功能SoC处理器及其解决方案

龙芯2K0500片内集成单个64位龙架构(LoongArch)LA264处理器核、32KB一级指令缓存、32KB一级数据缓存、512KB二级缓存、32位DDR2/3-1066控制器、2DGPU图形核心、DVO显示接口、两路PCIe2.0、两路SATA2.0、四路USB2.0、一路USB3.0、两路GMAC、PCI总线、彩色黑白打印接口、HDA及其他…

有备无患!DBS高性价比方案助力富途证券备份上云

“某中心受病毒攻击,导致服务中断,线上业务被迫暂停” “某公司员工误操作删库,核心业务数据部分丢失,无法完全找回” “由于服务器断线,某医院信息系统瘫痪近4小时,期间病人无法使用医保卡挂号和结算” …

Talk预告 | 微软高级研究员杨征元:统一的视觉语言模型

本期为TechBeat人工智能社区第467期线上Talk! 北京时间12月29日(周四)20:00,微软高级研究员——杨征元的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “统一的视觉语言模型”,届时将从一个统一的角度概述视觉语…

深度循环神经网络

在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。 有许多不同风格的深度循环神经网络, 如长短期记忆网络、门控循环单元、或经典循环神经网络。 这些模型在深度学习框架的高级API中都有涵盖。 总体而言&#xff0c…

第三方库react-redux基础使用 容器UI组件使用 数据管理优化

其实redux并不是React特有的技术 redux是一家独立公司 做出来 适配与目前几大前端主流框架的状态管理工具。 其实 最初 redux也希望码友们用它来管理vue的状态数据 但后面 React官方发现 很多人喜欢在React项目中使用redux 于是 React公司专门做了react-redux这个第三方的库 帮…

【计组】数据通路和流水线设计--《深入浅出计算机组成原理》(三)

课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 目录 一、建立数据通路 (一)组合逻辑电路 1、指令周期 2、数据通路 3、CPU所需硬件电路 (二)时序逻辑电路 1、时序逻辑电路可以解决的问题 二…

Python爬虫进行正则数据解析实战

今天继续给大家介绍Python爬虫相关知识,本文主要内容是Python爬虫进行正则数据解析实战。 一、需求分析 今天,我们尝试使用re正则表达式来对爬取到的页面进行数据解析。需求如下: 针对网页:https://blog.csdn.net/weixin_402282…

第三十二章 数论——组合数详解(1)

第三十二章 数论——组合数的多种求法一、数学基础二、组合数——递推公式1、题目2、思路3、代码三、组合数——快速幂1、问题:2、分析一、数学基础 组合数来自于高中排列组合的知识: 我们从aaa个小球中随机一次性取出bbb个,所有的取法记作…