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

【笔记】离线Ubuntu20.04+mysql 5.7.36 + xtrabackup定时增量备份脚本

一、环境

● Ubuntu版本查看

lsb_release -a

● mysql 版本查看

mysql --version

我的是ubuntu 20.04,mysql是5.7.36,所以要用 install_percona-xtrabackup-24

二、原理

备份

  • 通过ubuntu自带的定时器运行增量备份脚本
  • 备份文件可以存储在映射后的其他服务器目录,也可以存在数据库所在的本地服务器目录
  • 只有在当日有新增数据库时才会产生新的备份路径
  • 不可增量备份Myisam

恢复

  • 是将全量备份与各个日期的增量备份合并导回数据库

三、准备

百度网盘总是和谐我的资源,所以现在我取消会员,直接改用移动硬盘了
各个包都可以从此处下载 https://ubuntu.pkgs.org/22.04/ubuntu-main-amd64/locales_2.35-0ubuntu3_all.deb.html
下载好后,统一放进一个文件夹内
在这里插入图片描述

1. 自动安装脚本 install_percona-xtrabackup-24.sh

#!/bin/bash
# -*- coding: utf-8 -*-
# @Time  : 2023/09/18 14:38
# @Author: kudoxi
# @File  : install_percona-xtrabackup-80.sh
# @Desc  : 该安装脚本只适用于ubuntu20.04# 当前目录
path=$(pwd)# 判断是否已经安装了,安装过了最好谨慎安装,防止是系统库
is_exist(){
package=$1
package_deb=$2if test ! -z "$(dpkg -l | grep -w $package)";thenecho -e "$package exist "# dpkg -i ${path}/$package_deb
elsedpkg -i ${path}/$package_deb
fi
}install(){is_exist libdbi-perl libdbi-perl_1.643-1ubuntu0.1_amd64.debis_exist libdbd-mysql-perl libdbd-mysql-perl_4.050-3ubuntu0.2_amd64.debis_exist libcurl4-openssl libcurl4-openssl-dev_7.68.0-1ubuntu2.19_amd64.debis_exist libev4:amd64 libev4_4.31-1_amd64.debis_exist percona-xtrabackup-24 percona-xtrabackup-24_2.4.20-1.focal_amd64.deb
}installinnobackupex --version

2. 全量/增量备份脚本 mysql_incremental_backup.sh

#!/bin/bash# MySQL 用户名,密码和主机名。需要备份权限。
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_HOST="127.0.0.1"
# 是否自动 0为手动 1为定时自动
IS_TIMER_OPEN=1# 备份目录和日志文件的路径。确保这些目录存在并具有适当的权限。
ROOT_PATH="/home/kudoxi"
BASE_DIR="$ROOT_PATH/temp"
FULL_BACKUP_DIR="$BASE_DIR/full"
INCREMENTAL_BACKUP_DIR="$BASE_DIR/incremental"
LOG_FILE="$BASE_DIR/backup.log"
INCREMENTAL_DATE="$(date +%Y-%m-%d)"# 非定时任务创建增量备份目录
if [ $IS_TIMER_OPEN -eq 0 ]; thenmkdir -p "$BASE_DIR"# 给权限cd $ROOT_PATHsudo chmod -R 777 "$BASE_DIR"cd $BASE_DIRmkdir -p "$INCREMENTAL_BACKUP_DIR"mkdir -p "$INCREMENTAL_DIR"sudo chmod -R 777 "$INCREMENTAL_BACKUP_DIR"sudo chmod -R 777 "$INCREMENTAL_DIR"
fiINCREMENTAL_DIR="$INCREMENTAL_BACKUP_DIR/$INCREMENTAL_DATE"# 检查全量备份是否需要准备
if [ ! -f "$FULL_BACKUP_DIR/xtrabackup_checkpoints" ]; thenecho "Full backup needs to be prepared. Running prepare command..." >> "$LOG_FILE"innobackupex --defaults-file=/etc/mysql/my.cnf --user="$MYSQL_USER" --password="$MYSQL_PASSWORD" --no-timestamp $FULL_BACKUP_DIR
fi# 执行增量备份
/usr/bin/xtrabackup --backup --target-dir="$INCREMENTAL_DIR" --incremental-basedir="$FULL_BACKUP_DIR" --user="$MYSQL_USER" --password="$MYSQL_PASSWORD" --host="$MYSQL_HOST" >> "$LOG_FILE" 2>&1
# 检查备份结果
if [ $? -eq 0 ]; thenecho "Incremental backup completed successfully." >> "$LOG_FILE"
elseecho "Incremental backup failed. Please check the log for details." >> "$LOG_FILE"
fi

3. 备份恢复脚本 mysql_restore_backup.sh

#!/bin/bash# MySQL 用户名,密码和主机名
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_HOST="127.0.0.1"# 备份目录和日志文件的路径
ROOT_PATH="/home/kudoxi"
BASE_DIR="$ROOT_PATH/temp"
FULL_BACKUP_DIR="$BASE_DIR/full"
INCREMENTAL_BACKUP_DIR="$BASE_DIR/incremental"
LOG_FILE="$BASE_DIR/restore.log"systemctl stop mysql
mv /var/lib/mysql "/var/lib/mysql_bak_$(date '+%Y-%m-%d-%H-%M-%S')"# 恢复到的数据库目录
RESTORE_DIR="$BASE_DIR/restore"# 清除之前的恢复目录
if [ -d "$RESTORE_DIR" ]; thenrm -rf "$RESTORE_DIR"
fi# 恢复全量备份
echo "Restoring full backup..." >> "$LOG_FILE"
innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back --user="$MYSQL_USER" --password="$MYSQL_PASSWORD" $FULL_BACKUP_DIR >> "$LOG_FILE" 2>&1# 检查是否成功恢复全量备份
if [ $? -eq 0 ]; then# 恢复增量备份echo "Applying incremental backups..." >> "$LOG_FILE"for dir in $(ls -d "$INCREMENTAL_BACKUP_DIR"/*/); doecho "Applying $dir..." >> "$LOG_FILE"innobackupex --defaults-file=/etc/mysql/my.cnf --apply-log --redo-only --user="$MYSQL_USER" --password="$MYSQL_PASSWORD" --incremental-dir="$dir" $RESTORE_DIR >> "$LOG_FILE" 2>&1done# 合并增量备份echo "Merging incremental backups..." >> "$LOG_FILE"innobackupex --defaults-file=/etc/mysql/my.cnf --apply-log --user="$MYSQL_USER" --password="$MYSQL_PASSWORD" --redo-only $RESTORE_DIR >> "$LOG_FILE" 2>&1# 恢复完成后,将恢复的数据目录移动到MySQL的数据目录if [ -d "$RESTORE_DIR" ]; thenmv "$RESTORE_DIR"/* /var/lib/mysql/elseecho "Error: Restore directory does not exist or is empty." >> "$LOG_FILE"fi# 重新授权MySQL数据目录的权限chown -R mysql:mysql /var/lib/mysql# 重启MySQL服务systemctl restart mysql# 检查恢复结果if [ $? -eq 0 ]; thenecho "Database restore completed successfully." >> "$LOG_FILE"elseecho "Database restore failed. Please check the log for details." >> "$LOG_FILE"fi
elseecho "Error: Failed to restore full backup. Please check the log for details." >> "$LOG_FILE"
fi

四、安装 xtrabackup

  1. 把你设置的目录放到服务器根目录下,比如我把安装脚本和安装包都放在了mysql-5.7.36

进入目录

cd ~/mysql-5.7.36
  1. 执行安装
sudo bash install_percona-xtrabackup-24.sh
  1. 验证安装成功
innobackupex --version

五、设定定时

  1. 打开定时服务日志,系统会默认关闭定时服务的日志
sudo vim /etc/rsyslog.d/50-default.conf

在这里插入图片描述
解开注释
保存退出

  1. 重启日志服务
sudo service rsyslog restart
  1. 过一段时间后定时日志就会刷新
tail -100 /var/log/cron.log

六、数据库权限

  1. 先尝试不使用sudo 直接执行mysql命令是否可以进入
mysql -uroot -p

如果失败,则说明当前用户没有权限直接执行mysql命令
如果成功,则跳过这一步

  1. 添加权限
    将当前用户添加到名为"mysql"的组中,并重新加载用户组
  sudo usermod -aG mysql $USERsudo newgrp mysql

七、全量备份

  1. 第一次安装好后,需要先手动运行一次全量备份,确定全量备份存储路径
    比如我放在~/nas/164_mysql/里
cd ~/nas
sudo mkdir 164_mysql

修改备份脚本存储的真实路径

sudo vim /home/manteia/mysql-5.7.36/mysql_incremental_backup.sh

左下角输入:%s#temp#备份存放的路径#g
在这里插入图片描述
回车确定,全局替换
在这里插入图片描述
2. 然后设定为手动模式
把1改为0
在这里插入图片描述
然后按ESC后输入:x 回车保存退出

  1. 运行全量备份脚本
cd ~/mysql-5.7.36
sudo bash mysql_incremental_backup.sh

正常结果为
在这里插入图片描述

异常时可以查看日志

tail -100 ~/nas/164_mysql/backup.log

八、设置定时增量备份

  1. 打开定时设置脚本
crontab -e

选择习惯使用的编辑器
在这里插入图片描述

  1. 设置定时备份时间,比如每天早上10点30分执行,保存退出
30 10 * * * /bin/bash /home/kudoxi/mysql-5.7.36/mysql_incremental_backup.sh
  1. 重启服务立刻生效
sudo service cron restart
  1. 重设置增量脚本模式
sudo vim /home/kudoxi/mysql-5.7.36/mysql_incremental_backup.sh

从0改为1后保存退出
在这里插入图片描述

  1. 设置脚本可执行权限
sudo chmod +x /home/kudoxi/mysql-5.7.36/mysql_incremental_backup.sh
  1. 成功后每天这个时间~/nas/164_mysql/incremental目录下就可以自动生成一个新的当天日期命名的数据
  2. 如果失败,则可以查看日志
tail -100 ~/nas/164_mysql/backup.log

九、数据库恢复

  1. 执行备份脚本
sudo bash /home/kudoxi/mysql-5.7.36/mysql_restore_backup.sh
  1. 成功后可以查看日志
tail -100 ~/nas/164_mysql/restore.log

相关文章:

【笔记】离线Ubuntu20.04+mysql 5.7.36 + xtrabackup定时增量备份脚本

一、环境 ● Ubuntu版本查看 lsb_release -a● mysql 版本查看 mysql --version我的是ubuntu 20.04,mysql是5.7.36,所以要用 install_percona-xtrabackup-24 二、原理 备份 通过ubuntu自带的定时器运行增量备份脚本备份文件可以存储在映射后的其他…...

树哈希与换根dp:CF763D

采用的树哈希函数是&#xff1a; d p x w x ∑ y ∈ x d p y 2 w x 2 \Large dp_xw_x\times \sum_{y\in x}dp_y^2w_x^2 dpx​wx​y∈x∑​dpy2​wx2​ 发现从 x x x 到 y y y 时只有 x x x 与 y y y 的哈希值会变化&#xff0c;分别维护即可 #include<bits/stdc.h&…...

npm、yarn、pnpm如何清除缓存?

前端工程化创建项目会经常使用各种安装包管理工具&#xff0c;安装各种前端依赖包。例如&#xff0c;npm、yarn、pnpm等。时间一长&#xff0c;各种安装包管理工具的在安装依赖时&#xff0c;留下的缓存文件就会变得很大&#xff0c;以至于影响系统的运行&#xff0c;因此必要时…...

12款最火的AI画图软件,助你探索创新设计

ChatGPT火爆出圈&#xff0c;AI画图软件也如雨后春笋般流行起来。各类AI画图的软件工具横空出世&#xff0c;设计师与其焦虑工作会不会被人工智能取代&#xff0c;不如践行“工欲善其事必先利其器”&#xff0c;开拓思路&#xff0c;打开格局&#xff0c;好好地探索下如何利用好…...

cookie信息无法获取问题研究

背景 在oneapi这个前后端都有的开源项目中&#xff0c;我想接入chatnextweb到oneapi的后端。 由于需要二开chatnextweb&#xff0c;添加登录注册功能&#xff0c;考虑到java后端的性能问题和内存占用&#xff0c;决定不重启写个服务&#xff0c;而是将登录注册接入到oneapi的…...

Linux:冯诺依曼系统和操作系统的概念

文章目录 冯诺依曼体系结构冯诺依曼体系的理解 操作系统操作系统的基本定位操作系统的理解1 操作系统的理解2总结 本篇主要总结的是操作系统的基本认知和一些概念 冯诺依曼体系结构 那么上图表示的就是冯诺依曼体系结构&#xff0c;那这个体系结构是什么&#xff1f;为什么要先…...

【操作系统笔记十一】进程间通信

Linux文件系统 inode 节点 &#xff08;index node&#xff09;&#xff1a;给每个文件赋予一个称为 i 节点的数据结构。 inode 一开始是存储在硬盘中的&#xff0c;只有当文件被打开的时候&#xff0c;其对应的 i 节点才加载到内存中。 总结&#xff1a; Linux 中&#xff0c…...

【操作系统】聊聊Linux软中断

什么是中断 中断是系统用来响应硬件设备请求的一种机制&#xff0c;会打断进程的正常调度和执行&#xff0c;转而去执行内核中的中断处理程序。 比如你正在看书&#xff0c;你女朋友叫你出去逛街。你就需要先放下手里的事情&#xff0c;然后逛街。回来之后&#xff0c;在接着看…...

公众号迁移个人可以迁移吗?

公众号账号迁移的作用是什么&#xff1f;只能变更主体吗&#xff1f;很多小伙伴想做公众号迁移&#xff0c;但是不知道公众号迁移有什么作用&#xff0c;今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了&#xff0c;比如我们公众号原来是A公司的&#x…...

全国职业技能大赛云计算--高职组赛题卷⑤(容器云)

全国职业技能大赛云计算--高职组赛题卷⑤&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续集成部署任务&#xff08;15分&#xff09;任务4 Kubernetes容器…...

支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答

很多投资者都知道&#xff0c;Renko图表和普通日本烛台都会采用相同的交易信号&#xff0c;即支撑位和阻力位。那么支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答。 这些信号在任何时间框架上都会出现&#xff0c;且在蜡烛图交易中颇受欢迎。对于Renko图表而言…...

如何在32位MCU用printf()函数打印64位数据

1. 在32位MCU上定义64位变量&#xff1a; unsigned long long time_base; unsigned long long temp_time;2. 调用打印函数&#xff1a; printf("RFID:time_base:%d\r\n",time_base); printf("RFID:temp_time:%d\r\n",temp_time); printf("RFID:Ru…...

Python爬虫程序设置代理常见错误代码及解决方法

Python爬虫程序设置代理是爬虫程序中常用的技巧&#xff0c;可以有效地绕过IP限制&#xff0c;提高爬虫程序的稳定性和效率。然而&#xff0c;在设置代理时&#xff0c;常会出现各种错误代码&#xff0c;这些错误代码可能会影响程序的正常运行&#xff0c;甚至导致程序崩溃。本…...

3D点云目标检测:Centerformer训练waymo数据集

一、环境准备 项目地址:centerformer 1.0、基础环境 python 3.8.0 torch 1.9.1cu111 waymo-open-dataset-tf-2-6-0 1.4.9 spconv 1.2.1 其余按照requirement.txt里安装就行 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt由于我本人是在…...

火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 自上世50年代&#xff0c;以“计算机”作为代表性象征的信息革命开始&#xff0c;社会对于先进生产力的认知便开始逐步更迭——从信息化&#xff08;通常认为是把企…...

windows上配置vscode C/C++代码跳转

windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件&#xff0c;必备的插件&#xff0c;是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外&#xff0c;还需要在本地下载安装GNU Global工具。多看下插件…...

【Xilinx】基于MPSoC的OpenAMP实现(一)

【Xilinx】基于MPSoC的OpenAMP实现&#xff08;一&#xff09; 一、开发环境1、开发思路2、下载官方bsp包 二、编译Linux1、配置petalinux环境变量2、创建工程3、进入目录4、设置缓存目录&#xff08;重点&#xff1a;可离线编译&#xff0c;加快编译速度&#xff09;5、配置u-…...

代码随想录算法训练营总结篇|完结撒花

完结撒花&#xff0c;真不敢相信60天坚持下来了。 算法一直是我的超级超级弱项&#xff0c;属于小白中的小白。一开始是想自己刷的&#xff0c;打开leetcode第一题&#xff0c;吼哟好家伙&#xff0c;梦开始的地方直接破碎。之前刷B站的时候就有学习up推荐算法可以看看代码随想…...

uniapp、vue实现滑动拼图验证码

uniapp、vue实现滑动拼图验证码 实际开发工作中&#xff0c;在登陆的时候需要短信验证码&#xff0c;但容易引起爬虫行为&#xff0c;需要用到反爬虫验证码&#xff0c;今天介绍一下拼图验证码&#xff0c;解决验证码反爬虫中的滑动验证码反爬虫。滑动拼图验证码是在滑块验证码…...

【ArcGIS】土地利用变化分析详解(矢量篇)

土地利用变化分析详解-矢量篇 土地利用类型分类1 统计不同土地利用类型的面积/占比1.1 操作步骤Step1&#xff1a;Step2&#xff1a;计算面积Step3&#xff1a;计算占比 2 统计不同区域各类土地利用类型的面积2.1 操作步骤 3 土地利用变化转移矩阵3.1 研究思路3.2 操作步骤 4 分…...

VS2022创建控制台应用程序后没有Main了,如何显示Main?

文章目录 问题描述原因解决方案简单的顶级语句试用计算器 其他文章 问题描述 用VS2022创建一个控制台应用后&#xff0c;没有名称空间和Main函数了&#xff0c;只有一个WriteLine&#xff0c;如下所示。 // See https://aka.ms/new-console-template for more information Co…...

当当网商品详情数据接口

当当网商品详情数据接口可以通过当当网的开放平台获取相关信息。您可以注册当当开放平台账号&#xff0c;并按照要求提交申请获取API接口的调用凭证。获得授权后&#xff0c;您将会收到一组AccessKey和SecretKey。使用编程语言&#xff08;如Java&#xff09;调用API接口&#…...

ultraEdit正则匹配多行(xml用)

在ultraEdit中&#xff0c;我想选取<channel到</channel>之间的多行&#xff08;进行删除&#xff09;。在perl模式下&#xff0c;命令为“<channel[\s\S]?</channel>”。下面是xml文件&#xff1a; <!--This XML file does not appear to have any sty…...

Mac上的utools无法找到本地搜索插件

utools安装地址 utools本地搜索用法 目前本地搜索只在win下&#xff0c;mac无福了 Mac可用cmdspace方法使用聚焦搜索&#xff0c;来搜索本地文件...

win11 administrator 账户运行不提示授权

...

docker部署nginx下日志自动切割方法

前言&#xff1a;nginx采用docker部署&#xff0c;简单方便&#xff0c;但出现一个问题&#xff0c;就是日志没有自动切割&#xff0c;导致access.log 无限增大。如果非docker安装&#xff0c;则nginx的日志默认有切割的&#xff0c;那docker为何没有呢&#xff0c;最后发现&am…...

3D目标检测实战 | 图解KITTI数据集与数据格式

目录 1 数据集简介2 传感器坐标系3 数据集下载与组织4 数据内容说明4.1 矫正文件calib4.2 图像文件image4.3 点云文件velodyne4.4 标签文件label4.5 平面文件plane 1 数据集简介 KITTI数据集是一个广泛应用于自动驾驶和计算机视觉领域的公开数据集。该数据集由德国卡尔斯鲁厄理…...

周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来&#xff0c;周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用&#xff0c;通过AI智能检测与视频智能分析技术&#xff0c;现代化的周界安防系统可以做到全天候快速、准确…...

C++中执行shell命令,popen与system的区别

C中执行shell命令&#xff0c;popen与system的区别_c popen_Op_chaos的博客-CSDN博客 2.system system()函数执行过程&#xff1a; 1.fork一个子进程&#xff1b; 2.在子进程中调用exec函数去执行command&#xff1b; 3.在父进程中调用wait去等待子进程结束。 由于system没…...

Flink相关

墨滴社区 用 Flink 取代 Spark Streaming&#xff01;知乎实时数仓架构演进_天池技术圈-阿里云天池 关于flink实时数仓的实际问题_flink datastream 按天,小时写入hdfs_一个写湿的程序猿的博客-CSDN博客 基于 Flink Hudi 的实时数仓在 Shopee 的实践 - 墨天轮...

公家网站模板/百度一下百度搜索

javap是JDK自带的反汇编器&#xff0c;可以查看java编译器为我们生成的字节码。通过它&#xff0c;我们可以对照源代码和字节码&#xff0c;从而了解很多编译器内部的工作。语法&#xff1a;javap[ 命令选项 ] class. . .javap命令用于解析类文件。其输出取决于所用的选项。若没…...

常州做的网站的公司哪家好/网站营销推广有哪些

科技资讯&#xff1a;安卓用户经常会遇到各种APP自动启动&#xff0c;安卓手机一晚上待机耗电比较高。而由于可管理的后台不同&#xff0c;iPhone用户似乎没有这种困扰&#xff0c;但这并不意味着苹果手机晚上待机时不会掉电&#xff0c;相反地&#xff0c;如果你地iPhone一晚上…...

廊坊建站服务/新媒体营销案例分析

最近遇到一个有意思的bug&#xff0c;是关于VSCode编辑器插件的&#xff0c;赶项目时间非常紧&#xff0c;说实话在这时平常用的顺手的IDE出问题非常影响心情。「这就像是你开在高速路上&#xff0c;吃着火锅唱着歌&#xff0c;突然轮胎爆了&#xff0c;你说气不气人」。不过在…...

东莞樟木头网站设计/起名最好的网站排名

今天看到了一个Python库&#xff0c;名为markdown。瞬间就给了我一个灵感&#xff0c;那就是制作一个将markdown文件转换成html文件的小工具。 我的实验环境 操作系统&#xff1a; Windows 7 64位 旗舰版Python版本&#xff1a; 2.7.11IDE&#xff1a; PyCharm pro 2016.1所需…...

wordpress 多标签/百度快速优化软件

JSON 语法规则 在 JS 语言中&#xff0c;一切都是对象。因此&#xff0c;任何支持的类型都可以通过 JSON 来表示&#xff0c;例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型&#xff1a; 对象表示为键值对 数据由逗号分隔 花括号保存对象 方括…...

应用网站建设/seo检查工具

第1周的编程题。请注意1.x的“如何交作业” 温馨提示&#xff1a; 1.本次作业属于Online Judge题目&#xff0c;提交后由系统即时判分。 2.学生可以在作业截止时间之前不限次数提交答案&#xff0c;系统将取其中的最高分作为最终成绩。 1温度转换&#xff08;10分&#xff09;题…...