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

MySQL生产环境备份脚本

全量备份脚本,其中BakDir,ZlbakDir,LogFile需要自己创建

#!/bin/bash
export LANG=en_US.UTF-8# 指定备份目录
BakDir=/root/beifen/data/mysqlbak/data/allbak
# 指定增量备份目录
ZlbakDir=/root/beifen/data/mysqlbak/data/zlbak
# 备份日志位置
LogFile=/root/beifen/data/mysqlbak/log/bak.log# 获取当前时间
CurrentDate=$(date +%Y-%m-%d-%H-%M-%S)
# 脚本执行时间
Begin=$(date +"%Y年%m月%d日 %H:%M:%S")
# 要备份的数据库
Database=a# 进入全备目录
cd $BakDir || exit 1  # 如果目录不存在或无法进入,则退出脚本# 存储即将生成的SQL备份文件名称
DumpFile=$Database-$CurrentDate.sql
# 存储压缩后的名称
GZDumpFile=$Database-$CurrentDate.tar.gz# 使用mysqldump进行备份,--flush-logs会刷新日志,--delete-master-logs会删除旧的二进制日志(注意:这通常在生产环境中使用时需要谨慎),--single-transaction用InnoDB表的一致性备份。
mysqldump -u root -plmx $Database --flush-logs --delete-master-logs --single-transaction > $BakDir/$DumpFile# 用tar命令将SQL备份文件压缩成tar.gz格式
tar -czvf "$GZDumpFile" "$DumpFile"
rm "$DumpFile"# 统计当前目录下.tar.gz文件的数量
count=$(ls -l *.tar.gz 2>/dev/null | wc -l)
if [ $count -ge 2 ]; then# 删除最旧的.tar.gz文件file=$(ls -lt *.tar.gz | head -n 1 | awk '{print $9}')rm -f "$file"
fi# 获取脚本结束时的日期和时间
Last=$(date +"%Y年%m月%d日 %H:%M:%S")# 将备份的开始时间、结束时间和成功生成的压缩文件名追加到日志文件中
echo "开始:$Begin 结束:$Last $GZDumpFile success" >> "$LogFile"# 进入增量备份目录,这里假设您只想清空目录(注意:这可能会删除重要文件)
cd $ZlbakDir || exit 1
rm -f *# 如果需要保留某些文件(如binlog),请修改上面的rm命令以排除这些文件。

成功后会在目录里看到一个tar.gz包,解压之后就可以查看sql文件了
在这里插入图片描述
增量备份脚本
其中BakDir,LogFile需要自己创建,BinDir和BinFile需要自己寻找,如果不知道在那的话登录MySQL输入以下两条命令

MySQL 会自动管理二进制日志索引文件,其名称通常与二进制日志文件的基本名称相同,但扩展名为 .index。在您的配置中,由于 log-bin=mysql-bin,二进制日志索引文件通常会被命名为 mysql-bin.index

#!/bin/bash
# 指定脚本的解释器为Bashexport LANG=en_US.UTF-8
# 设置环境变量LANG为en_US.UTF-8,确保脚本在处理文本时使用UTF-8编码BakDir=/root/beifen/data/mysqlbak/data/zlbak
# 定义备份目录的路径BinDir=/usr/local/mysql/data
# 定义MySQL二进制日志文件的目录路径LogFile=/root/beifen/data/mysqlbak/log/binlog.log
# 定义日志文件的路径,用于记录备份过程中的信息BinFile=/usr/local/mysql/data/mysql-bin.index
# 定义包含二进制日志文件列表的索引文件的路径mysqladmin  -u root -plmx flush-logs
# 使用mysqladmin命令刷新MySQL的日志,包括二进制日志。Counter=$(wc -l $BinFile | awk '{print $1}')
# 计算索引文件($BinFile)中的行数,即二进制日志文件的数量,并将结果存储在变量Counter中NextNum=0
# 初始化NextNum变量为0,用于在后续循环中计数# 这个for循环用于遍历索引文件($BinFile)中的每一行(每个文件路径)
for file in $(cat $BinFile)
dobase=$(basename $file)# 使用basename命令从完整路径中提取文件名(不包含路径)NextNum=$(expr $NextNum + 1)# 将NextNum的值加1if [ $NextNum -eq $Counter ]then# 如果当前文件是索引文件中的最后一个文件echo $base skip! >> $LogFile# 则记录到日志文件中,表示跳过else# 如果不是最后一个文件dest=$BakDir/$base# 定义目标备份文件的完整路径if test -e $destthen# 如果目标备份文件已经存在echo $base exist! >> $LogFile# 则记录到日志文件中,表示文件已存在else# 如果目标文件不存在cp $BinDir/$base $BakDir# 将二进制日志文件从MySQL的日志目录复制到备份目录echo $base copying >> $LogFile# 记录到日志文件中,表示文件正在被复制fifi
done# 记录备份成功的消息到日志文件中,并附带当前日期和时间
echo $(date +"%Y年%m月%d日 %H:%M:%S") Backup success! >> $LogFile

成功后如下
在这里插入图片描述

http://www.lryc.cn/news/503399.html

相关文章:

  • leetcode 3224. 使差值相等的最少数组改动次数
  • 多线程动态库里面调用静态库分配内存函数导致的崩溃cltp汇编指令导致
  • 力扣刷题TOP101: 31.BM38 在二叉树中找到两个节点的最近公共祖先
  • 前端项目打包部署
  • 《CSS 知识点》大屏卡片布局思路:弹性布局 flex-grow
  • nVisual 登录页页面配置说明
  • 后端接受前端传递数组进行批量删除
  • 拍频实例 - 一组恒力矩电流采样数据
  • Jvm之NativeMemoryTracking 使用
  • PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)
  • R语言学习笔记-1
  • 我在广州学 Mysql 系列之 数据“表”的基本操作
  • auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式
  • 【R语言】基础知识
  • 【一本通】虫洞
  • python爬虫--小白篇【爬虫实践】
  • Unity背包道具拖拽(极简版实现)
  • spark读取普通文件
  • MySQL SQL语句性能优化
  • 【蓝桥杯每日一题】技能升级
  • css 实现在一条线上流动小物体(offset-path)
  • 探索 Robyn 框架 —— 下一代高性能 Web 框架
  • STL容器-map P3613【深基15.例2】寄包柜 普及-
  • 【MySQL 进阶之路】了解 性能优化 与 设计原则
  • MySQL之数据库三大范式
  • [大数据]Hudi
  • jenkins harbor安装
  • JavaScript 高级特性与 ES6 新特性:正则表达式的深度探索
  • 正则表达式——参考视频B站《奇乐编程学院》
  • 【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )