数据库备份shell脚本

news/2025/3/15 3:42:07/

文章目录

  • 数据库备份shell脚本
        • 变量定义
        • FTP 变量定义
        • 函数定义
        • 主逻辑

数据库备份shell脚本

# var
bak_cmd="--user=bakup --password=123456 --socket=/tmp/mysql.sock --no-timestamp"
full_dir="/db/full_`date +%F`"
incr_dir="/db/incr_`date +%F`"
info="completed OK!"
day=`date +%u`#ftp var
ip="192.168.133.130"
user="bak"
passwd="123456"
ftp_dir="/bakup/db"
loc_dir="`date +%F`"full_bak(){
[ -d ${full_dir} ] || mkdir -p ${full_dir}
innobackupex ${bak_cmd} ${full_dir} &> /tmp/checkbak
}incr_bak(){
[ -d ${incr_dir} ] || mkdir -p ${incr_dir}
innobackupex --incremental ${bak_cmd} ${incr_dir} --incremental-basedir="$1" &> /tmp/checkbak
}check(){
if [ -f /tmp/checkbak ];thenif [ "`tail -1 /tmp/checkbak | awk '{print $3,$4}'`" == "$info" ];thenecho "备份成功" && upload  else    echo "备份失败"fi
fi
}upload(){/usr/bin/lftp << EOFopen $ip user $user $passwdlcd /db/mirror -R ${bak_name}closequit
EOF
}# Remove backup older than 7 days
find /db/ -depth -type d -mtime +6 -exec rm -rf {} \;# main
if [ $day -eq 7  ];thenbak_name=full_`date +%F`full_bakcheck
elif [ $day -eq 1 ];thenbak_name=incr_`date +%F`incr_bak "/db/full_`date +%F -d '-1 day'`"check
elsebak_name=incr_`date +%F`incr_bak "/db/incr_`date +%F -d '-1 day'`"check
firm -f /tmp/checkbak

这是一个用于数据库备份的 shell 脚本。该脚本使用 innobackupex 工具进行 MySQL 数据库备份,支持全量备份和增量备份。备份完成后,将备份文件上传至远程 FTP 服务器,并删除本地备份文件夹中7天以前的备份文件。以下是每个部分的详细解释:

变量定义

bak_cmd="--user=bakup --password=123456 --socket=/tmp/mysql.sock --no-timestamp"
full_dir="/db/full_`date +%F`"
incr_dir="/db/incr_`date +%F`"
info="completed OK!"
day=`date +%u`
  • bak_cmd:用于设置备份时的 MySQL 登录用户、密码、MySQL socket 等参数。
  • full_dir:用于存放全量备份文件的文件夹路径。文件夹名称包含当前日期。
  • incr_dir:用于存放增量备份文件的文件夹路径。文件夹名称包含当前日期。
  • info:备份完成后输出的信息。
  • day:获取当前是星期几。

FTP 变量定义

ip="192.168.133.130"
user="bak"
passwd="123456"
ftp_dir="/bakup/db"
loc_dir="`date +%F`"
  • ip:FTP 服务器的 IP 地址。
  • user:FTP 登录用户名。
  • passwd:FTP 登录密码。
  • ftp_dir:FTP 服务器上备份文件存放的路径。
  • loc_dir:本地备份文件存放的路径。文件夹名称包含当前日期。

函数定义

full_bak(){
[ -d ${full_dir} ] || mkdir -p ${full_dir}
innobackupex ${bak_cmd} ${full_dir} &> /tmp/checkbak
}incr_bak(){
[ -d ${incr_dir} ] || mkdir -p ${incr_dir}
innobackupex --incremental ${bak_cmd} ${incr_dir} --incremental-basedir="$1" &> /tmp/checkbak
}check(){
if [ -f /tmp/checkbak ];thenif [ "`tail -1 /tmp/checkbak | awk '{print $3,$4}'`" == "$info" ];thenecho "备份成功" && upload  else    echo "备份失败"fi
fi
}upload(){/usr/bin/lftp << EOFopen $ip user $user $passwdlcd /db/mirror -R ${bak_name}closequit
EOF
}
  • full_bak:定义了全量备份函数。该函数首先创建一个存放全量备份文件的文件夹(如果文件夹不存在的话),然后使用 innobackupex 工具进行 MySQL 数据库全量备份。备份完成后,将备份信息保存到 /tmp/checkbak 文件中。
  • incr_bak:这个函数用于创建一个增量备份。它首先检查 ${incr_dir} 目录是否存在,如果不存在,则创建该目录。然后使用 innobackupex 命令进行增量备份,并将输出结果存储到 /tmp/checkbak 文件中。它还使用 --incremental-basedir 参数指定增量备份基于哪个完整备份。
  • check(): 这个函数用于检查备份是否成功完成。它首先检查 /tmp/checkbak 文件是否存在。如果存在,则使用 tailawk 命令获取输出结果的最后一行,并检查其中的信息是否为 $info。如果是,则表示备份成功,调用 upload() 函数将备份上传到 FTP 服务器。否则,表示备份失败。
  • upload(): 这个函数用于将备份文件上传到 FTP 服务器。它使用 lftp 命令实现 FTP 连接和文件传输。具体来说,它首先使用 open 命令连接 FTP 服务器,然后使用 user 命令指定用户名和密码进行身份验证,使用 lcd 命令切换到本地目录,最后使用 mirror 命令将备份文件上传到 FTP 服务器上的指定目录中。

主逻辑

# Remove backup older than 7 days
find /db/ -depth -type d -mtime +6 -exec rm -rf {} \;# main
if [ $day -eq 7  ];thenbak_name=full_`date +%F`full_bakcheck
elif [ $day -eq 1 ];thenbak_name=incr_`date +%F`incr_bak "/db/full_`date +%F -d '-1 day'`"check
elsebak_name=incr_`date +%F`incr_bak "/db/incr_`date +%F -d '-1 day'`"check
firm -f /tmp/checkbak
  • 这行代码使用find命令查找/db/目录下的子目录,并删除最后一次修改时间在7天之前的所有子目录及其内容。实现一个本地服务器的备份七天循环

  • 如果是每周的第七天,则进行全量备份;如果是每天的第一天,则进行增量备份,并以前一天的全量备份作为基准;否则进行增量备份,并以前一天的增量备份作为基准。

    备份时,使用innobackupex命令进行备份,全量备份时不需要指定基准目录,增量备份时需要指定基准目录。备份完成后会执行check函数,检查备份是否成功,并上传备份文件到指定的服务器。

  • 删除临时文件


http://www.ppmy.cn/news/47721.html

相关文章

Kotlin 1.6.0 的新特性

1、稳定版对于枚举、密封类与布尔值主语穷尽 when 语句 一个详尽的when语句包含了所有主题可能的类型或值的分支&#xff0c;或者对于一些类型包含一个else分支。它覆盖了所有可能的情况&#xff0c;使代码更加安全。 即将禁止非详尽的when语句&#xff0c;以使行为与when表达…

多模态之论文笔记ViLT

文章目录 ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision一. 简介1.1 摘要1.2 文本编码器&#xff0c;图像编码器&#xff0c;特征交互复杂度分析1.2 特征交互方式分析1.3 图像特征提取分析 二. 方法 Vision-and-Language Transformer2.1.方…

Docker Desktop使用PostgreSql配合PGAdmin的使用

在看此教程之前&#xff0c;请先下载安装Docker Desktop 安装成功可以查看版本 然后拉取postgresql的镜像&#xff1a;docker pull postgres:14.2 版本可以网上找一个版本&#xff0c;我的不是最新的 发现会报一个问题 no matching manifest for windows/amd64 10.0.19045 i…

R语言贝叶斯方法在生态环境领域中的应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域&#xff0c;其火爆程度已经跨越了学术圈&#xff0c;如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

加载美女图片之OpenCV 图像读取与显示

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;和openCv阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;openCv&#xff0…

C# 多线程编程的基础知识和常用的线程同步方式

多线程编程是现代软件开发中非常重要的一个方向&#xff0c;C# 作为一门现代化的编程语言&#xff0c;提供了丰富的多线程编程支持。下面我们来介绍一下 C# 多线程编程的基础知识和常用的线程同步方式。 基础知识 在 C# 中&#xff0c;可以使用 Thread 类来创建和管理线程。T…

怎么把avi文件转换成mp4视频格式,4个高能方法

怎么把avi文件转换成mp4视频格式&#xff1f; 当您下载到avi格式的视频文件时&#xff0c;您可能会选择将其转换为MP4格式的文件。 avi是一种由微软开发的多媒体容器格式&#xff0c;尽管现在已经被认为是老旧的技术&#xff0c;但由于其简单易懂的开发API和Windows的通用性&am…

TensorFlow 强化学习:6~10

原文&#xff1a;Reinforcement Learning With TensorFlow 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…