首页 > 数据库 >shell定时备份数据库

shell定时备份数据库

时间:2023-07-27 22:34:19浏览次数:50  
标签:shell tar 备份 gz DATETIME BACKUP 数据库

摘要

  • 讲解如何使用shell每天定时编写数据库

一、要求

  1. 每天凌晨2:30备份数据库db1到/data/backup/db
  2. 备份开始和备份结束能够给出相应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz
  4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。

提示,备份的命令为

mysqldump -uroot -p123456abcd --host=localhost -q -R --databases db1 > back.sql

其中:

  • root是用户名,123456abcd是密码
  • db1是数据库(备份的就是数据库)
  • > back.sql是将内容重定向至back.sql文件中,否则内容仅仅会在控制台打印

二、思路

首先编写shell

  1. 先写目录 /data/backup/db
  2. 然后获取时间 2021-03-12_230201
  3. 然后备份

二、步骤

1. 编写shell

  1. 首先获取时间
#!/bin/bash
# 备份目录
BACKUP=/data/backup/db

# 当前时间,使用函数获取 $()
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME  # 可以测试一下

  1. 然后配置其他参数
# 准备表示数据库的参数,表示一个数据库也就用以下几个参数
# 数据库的地址,这里使用本地数据库
HOST=localhost
#数据库的用户名
DB_USER=root
#数据库的密码
DB_PWD=123456abcd
#备份的数据库名
DATABASE=db1
  1. 检测并创建目录
#创建备份目录,如果不存在,则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
  1. 备份数据库
#备份数据库
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} > back.sql
  1. 如果还想压缩的话,可以继续写
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME/${DATETIME}.sql.gz
  • gzip是压缩,然后重定向至文件
  1. 将文件转换成tar.gz
# 将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}

# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
  1. 删除10天前的备份文件
# 删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
  • 这个是标准写法
  1. 成功
echo "备份数据库${DATABASE} 成功"

最终文件如下

#!/bin/bash
# 备份目录
BACKUP=/data/backup/db

# 当前时间,使用函数获取 $()
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#echo $DATETIME

# 准备表示数据库的参数
# 数据库的地址,这里使用本地数据库
HOST=localhost
#数据库的用户名
DB_USER=root
#数据库的密码
DB_PWD=123456abcd
#备份的数据库名
DATABASE=db1

#创建备份目录,如果不存在,则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

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

# 将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}

# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}

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

2. 加入定时任务

cronttab -e
30 2 * * * sh /home/crispycandy/dbback.sh

标签:shell,tar,备份,gz,DATETIME,BACKUP,数据库
From: https://www.cnblogs.com/CrispyCandy/p/17586291.html

相关文章

  • Shell的变量 | 定义 | 只读变量 | 指令返回值
    摘要介绍shell的变量变量的定义等一、shell变量介绍|显示所有变量LinuxShell中的变量分为,系统变量和用户自定义变量。系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo$HOME等等.显示当前shell中所有变量set二、shell变量的定义|注意事项基本语法定义变......
  • shell位置参数变量:shell接收参数
    摘要位置参数变量是什么位置参数变量相应的转义符(shell如何接收来自命令行的参数)一、基本介绍当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量比如:./myshell.sh100200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数......
  • shell预定义变量:进程号 | 后台最后一个进程的进程号 | 最有一个返回状态
    摘要介绍shell的预定义变量一、基本介绍就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用二、基本语法转义符说明$$当前进程的进程号(PID)$!后台运行的最后一个进程的进程号(PID)$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明......
  • SqlSugar.SqlSugarException: 连接数据库过程中发生错误,证书链是由不受信任的颁发机
    本地代码调试时报错 解决办法:直接在“数据库连接字符串最后面”增加证书信任的配置。;TrustServerCertificate=true ......
  • Linux基础——shell
    shell#############shell是什么-BashShell是一个命令解释器(python解释器),它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕-没有图形化界面了-远程链接工具,链接上,就打开了一个shell窗口,可以输入命令......
  • Android shell模拟物理按键
    Androidshell模拟物理按键在Android开发中,有时候我们需要模拟物理按键的操作,例如模拟点击返回键、Home键等。Android提供了一个能够在命令行中模拟按键操作的工具——input。input命令简介input命令是Android系统中的一个工具,用于模拟按键事件。通过使用不同的参数,我们可以模拟......
  • Django2配置文件、pycharm连接数据库、Django链接mysql、orm
    配置文件介绍(setting.py)注册应用的INSTALLED_APPS中间件MIDDLEWARE根路由文件名ROOT_URLCONFDjango连接数据库的DATABASES语言和时间LANGUAGE_CODE='zh-hans'TIME_ZONE='Asia/Shanghai'静态文件的配置以登录功能表单(form)的属性action参......
  • 正点原子Ubuntu入门015---shell脚本入门
    一、什么是shell脚本shell脚本类似于Windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件shell脚本提供数组、循环、条件判断功能。shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握基本的命令即可二、shell脚本的写法shell脚......
  • Domino数据库
    端口:1352......
  • shell 脚本的5种执行方式比较
    方式1:直接运行方式2:使用命令sh或bash方式3:使用命令source或.分类:是否需要执行权限只有方式1需要执行权限。这是因为方式1把脚本作为可执行文件,自然需要执行权限,但方式2和方式3都是把脚本作为命令的参数,可以不具备执行权限是否会创建子进程只有方式3不会创建子进......