【笔记】离线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

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

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

相关文章

云原生Kubernetes:Pod控制器

目录 一、理论 1.Pod控制器 2.Deployment 控制器 3.SatefulSet 控制器 4.DaemonSet 控制器 5.Job 控制器 6.CronJob 控制器 二、实验 1.Deployment 控制器 2.SatefulSet 控制器 3.DaemonSet 控制器 4.Job 控制器 5.CronJob 控制器 三、问题 1. showmount -e 报错…

华为OD机试 - 判断字符串子序列(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、Java算法源码五、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&am…

京东大型API网关实践之路

概述 1、背景 京东作为电商平台,近几年用户、业务持续增长,访问量持续上升,随着这些业务的发展,API网关应运而生。 API网关,就是为了解放客户端与服务端而存在的。对于客户端,使开放给客户端的接口标准统…

2023-9-28 JZ54 二叉搜索树的第k个结点

题目链接:二叉搜索树的第k个结点 import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方…

TVP专家谈腾讯云 Cloud Studio:开启云端开发新篇章

导语 | 近日,由腾讯云 TVP 团队倾力打造的 TVP 吐槽大会第六期「腾讯云 Cloud Studio」专场圆满落幕,6 位资深的 TVP 专家深度体验腾讯云 Cloud Studio 产品,提出了直击痛点的意见与建议,同时也充分肯定了腾讯云 Cloud Studio 的实…

文件审计及文件完整性监控

什么是文件审核 对文件服务器中发生的所有事件的检查称为文件审核。这包括监视文件访问,其中包含谁访问了什么文件、何时以及从何处访问的详细信息;对访问最多和修改的文件的分析;成功和失败的文件访问尝试;等等。文件服务器审核过程的主要目标是跟踪在配置的服务器…

Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 1(Pinia)

Pinia状态管理 在 Vue3 中项目中组件之间传递数据时,可以使用 Props 和 Emit,还可以使用 Provide/Inject 来代替 Props 和 Emit。Props 和 Emit 只能在具有父子关系的组件之间传递数据,所以层级越深,过程就越复杂。为了解决此类问…

蓝桥杯 题库 简单 每日十题 day11

01 质数 质数 题目描述 给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数。 输入描述 输入一行,包含一个正整数N。1≤N≤10^3 输出描述 共两行。 第1行包含若干个素数,每两个素数之间用一个空格隔开&…

【IDEA】使用idea调试时查看对象集合的值

1、在实体类上添加toString方法 2、在要查看集合的地方右键View as→toString 3、View Text复制对象集合的值 4、复制map集合的值同理

基于SSM的图书商城系统的设计与实现

基于SSM的图书商城系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 图书列表 图书详情 个人中心 管理员界面 摘要 本文旨在探讨和展示一种基于Spring、…

记一次实战案例

1、目标:inurl:news.php?id URL:https://www.lghk.com/news.php?id5 网站标题:趋时珠宝首饰有限公司 手工基础判断: And用法 and 11: 这个条件始终是为真的, 也就是说, 存在SQL注入的话, 这个and 11的返回结果必定是和正常页…

体验亚马逊的 CodeWhisperer 感觉

CodeWhisperer 是亚马逊推出的辅助编程工具,在程序员写代码时,它能根据其内容生成多种代码建议。 CodeWhisperer 目前已支持近10几种语言,我是用 java 语言,用的开发工具是 idea,说一下我用的情况。 亚马逊云科技开发…

Tomcat报404问题的原因分析

1.未配置环境变量 按照需求重新配置即可。 2.IIs访问权限问题 注意:这个问题有的博主也写了,但是这个问题可有可无,意思是正常情况下,有没有都是可以访问滴放心 3.端口占用问题 端口占用可能会出现这个问题,因为tomcat的默认端口号是8080,如果在是运行tomcat时计算机的…

【C++】CC++内存管理

一、C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4)…

Go语言开发小技巧易错点100例(九)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…

pg数据表同步到hive表数据压缩总结

1、背景 pg库存放了大量的历史数据,pg的存储方式比较耗磁盘空间,pg的备份方式,通过pgdump导出后,进行gzip压缩,压缩比大概1/10,随着数据的积累磁盘空间告警。为了解决pg的压力,尝试采用hive数据…

树与二叉树的概念 性质及其存储结构

💓博主csdn个人主页:小小unicorn ⏩专栏分类:数据结构 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 树与二叉树 树的概念与结构:树的概…

并查集专题

一、并查集的定义 二、基本操作 1、初始化 一开始,每个元素都是独立的集合 #include<iostream>using namespace std;const int maxN=1000; int father[maxN];int</

奶茶果饮外卖配送小程序商城的作用是什么

奶茶果饮商家众多&#xff0c;有加盟品牌也有独立自创品牌或小店等&#xff0c;奶茶果饮已经成为众多年轻人群体喜爱的饮品&#xff0c;在实际消费方面&#xff0c;普遍以到店外卖为主&#xff0c;市场需求较高&#xff0c;但同样的竞争压力也不小。 同行竞争激烈&#xff0c;…

电脑技巧:笔记本电脑升级固态硬盘的注意事项,看完你就懂了

目录 1、接口类型 2、接口速率 3、固态硬盘的尺寸 4、发热情况 5、总结 如今的固态硬盘价格越来越便宜了&#xff0c;甚至某品牌4TB的PCIe4.0 M.2还爆出过不到900元的“报恩价”&#xff0c;让不少小伙伴都动了扩容甚至囤货的心思。但对于笔记本电脑用户来说&#xff0c;升…