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

项目需求 | MySQL增量备份与恢复的完整操作指南

目录

一、MySql数据库增量备份的工作原理

1、全量备份与增量备份

2、增量备份原理

二、进行增量备份

步骤1:启用二进制日志

使用 SHOW VARIABLES 命令查看二进制日志状态

步骤2:执行增量备份脚本

三、使用增量备份恢复损坏的数据库

步骤1:恢复全量备份

步骤2:执行增量恢复脚本恢复全量备份


一、MySql数据库增量备份的工作原理

1、全量备份与增量备份

在数据库管理中,备份是确保数据安全的关键步骤。数据库发生故障、数据丢失或误操作时,备份是恢复数据的唯一途径。全量备份保存整个数据库的完整副本,但随着数据量增加,备份时间和存储需求也会显著增加。相比之下,增量备份可以有效优化这一过程。增量备份仅保存自上次备份以来的变更数据,极大减少了备份时间和存储空间。特别是在数据更新频繁的业务环境中,增量备份是一种高效且经济的选择,能够快速恢复到最新的数据库状态,确保数据安全与业务连续性。

2、增量备份原理

MySql的增量备份实际上是在完成一次完整的全量备份之后,后续只备份自上次备份以来对数据库所做的变更,例如新增(INSERT)、修改(UPDATE)和删除(DELETE)操作。增量备份呢依赖于 二进制日志(Binary Logs),这些日志记录了所有对数据库的更改(如 INSERTUPDATEDELETE 操作)。在恢复数据库时,先恢复数据库的全备份,恢复到某个时间点的完整数据状态。再从前往后执行备份的增量备份日志,将数据库恢复到最新状态。

  1. 全备份
    • 全备份 是备份整个数据库的完整副本,通常在备份操作的起点进行。它包含所有表结构、数据等。
    • 全备份创建之后,后续的备份可以依赖增量备份来减少备份的数据量和时间。
  2. 二进制日志(Binary Logs)
    • MySql 的二进制日志是一个关键组件,它记录了所有对数据库造成更改的 SQL 语句,包括 INSERTUPDATEDELETE 等操作。通过保存这些二进制日志,可以实现增量备份。
    • 二进制日志不记录 SELECT 操作,因为它们不会更改数据。
  3. 增量备份
    • 增量备份不再保存整个数据库,而是通过读取并保存自上次备份以来的二进制日志文件,记录这些日志所涉及的更改。
    • 增量备份通常以二进制日志文件的方式存在(如 MySql-bin.000001),也可以通过 MySqlbinlog 工具导出为 SQL 格式,以便日后恢复。
  4. 恢复过程
    • 恢复数据库时,首先应用全备份,恢复到某个时间点的完整数据状态。
    • 然后,依次应用每个增量备份(即二进制日志文件),将数据库恢复到最新状态。

二、进行增量备份

步骤1:启用二进制日志

首先,确保 MySql 配置文件中启用了二进制日志功能。编辑 MySql 配置文件(my.cnfmy.ini)并添加以下行:

[MySqld]
log-bin=/var/log/MySql/MySql-bin

启用后,重新启动 MySql 服务:

sudo systemctl restart MySql
使用 SHOW VARIABLES 命令查看二进制日志状态

如果输出结果是 ON,说明二进制日志已开启;如果是 OFF,则表示二进制日志未启用。

步骤2:执行增量备份脚本

创建一个的bash脚本文件backup_MySql.sh,将下面的代码段进行如下四步修改后拷贝进去。

  • MySql_USERMySql_PASSWORD 替换为你的 MySql 用户名和密码。
  • MySql_HOST 设置为 MySql 服务器的地址,通常是 localhost
  • BINLOG_DIR 设置为本机MySql数据库的二进制日志存放目录。
  • 将倒数第二行的sleep后方的数字(文中是sleep 10)修改为你希望的增量备份的时间间隔。
#!/bin/bash# MySql 配置
MySql_USER="root"
MySql_PASSWORD="xxxxxx."
MySql_HOST="localhost"
BACKUP_DIR="./backup"
LOG_FILE="$BACKUP_DIR/backup.log"
BINLOG_DIR="/www/server/data"  # 二进制日志目录
FULL_BACKUP_DIR="$BACKUP_DIR/full"
INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/incremental"
LAST_BACKUP_FILE="$BACKUP_DIR/last_backup_pos.txt"# 检查备份目录是否存在,不存在则创建
mkdir -p "$FULL_BACKUP_DIR" "$INCREMENTAL_BACKUP_DIR"# 完全备份函数
full_backup() {TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")FULL_BACKUP_PATH="$FULL_BACKUP_DIR/full_backup_$TIMESTAMP.sql"echo "Starting full backup at $TIMESTAMP" >> "$LOG_FILE"MySqldump -u "$MySql_USER" -p"$MySql_PASSWORD" -h "$MySql_HOST" --all-databases > "$FULL_BACKUP_PATH"# 记录二进制日志位置MySql -u "$MySql_USER" -p"$MySql_PASSWORD" -h "$MySql_HOST" -e "SHOW MASTER STATUS;" | awk 'NR==2 {print $1, $2}' > "$LAST_BACKUP_FILE"echo "Full backup completed at $TIMESTAMP" >> "$LOG_FILE"
}# 增量备份函数
incremental_backup() {TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")INCREMENTAL_BACKUP_PATH="$INCREMENTAL_BACKUP_DIR/incremental_backup_$TIMESTAMP.sql"echo "Starting incremental backup at $TIMESTAMP" >> "$LOG_FILE"# 读取上次备份的二进制日志位置if [ -f "$LAST_BACKUP_FILE" ]; thenBINLOG_FILE=$(awk '{print $1}' "$LAST_BACKUP_FILE")BINLOG_POS=$(awk '{print $2}' "$LAST_BACKUP_FILE")# 进行增量备份MySqlbinlog --start-position="$BINLOG_POS" "$BINLOG_DIR/$BINLOG_FILE" > "$INCREMENTAL_BACKUP_PATH"# 记录当前的二进制日志位置MySql -u "$MySql_USER" -p"$MySql_PASSWORD" -h "$MySql_HOST" -e "SHOW MASTER STATUS;" | awk 'NR==2 {print $1, $2}' > "$LAST_BACKUP_FILE"echo "Incremental backup completed at $TIMESTAMP" >> "$LOG_FILE"elseecho "No previous backup found, running full backup instead." >> "$LOG_FILE"full_backupfi
}# 每隔3600秒运行增量备份
while true; do# 判断是否是第一次运行(没有完全备份),如果是则先做完全备份if [ ! -f "$LAST_BACKUP_FILE" ]; thenfull_backupelseincremental_backupfi# 休眠10秒sleep 10
done

运行脚本
给脚本添加执行权限并运行:

chmod +x backup_MySql.sh
./backup_MySql.sh

确认备份文件目录:确保增量备份的 SQL 文件存放在 INCREMENTAL_BACKUP_DIR(例如 /backup/MySql/incremental/)目录下,文件名格式为 incremental_backup_*.sql,并按时间顺序命名。

  • 脚本会从指定的备份目录中读取所有按时间命名的增量 SQL 文件,并将它们按顺序恢复到指定的 MySql 数据库中。
  • 如果恢复过程中遇到错误,脚本会停止并提示出错的文件。

三、使用增量备份恢复损坏的数据库

向数据库中生成一些数据,执行增量备份。

删除生成的数据,模拟数据库损毁的情况。

步骤1:恢复全量备份

MySql -uroot -p. < ./full_backup_2024-09-12_16-01-04.sql

以下参数需要进行替换或注意:

  • -uroot:将root用户替换为你想使用的你的 MySql 用户名。
  • -p:提示输入密码(恢复时需要输入 MySql 密码)。
  • ./full_backup_2024-09-12_16-01-04.sql:将此文件替换为脚本执行时产生的全量备份文件。

步骤2:执行增量恢复脚本恢复全量备份

在增量备份脚本相同目录下创建restore_incremental.sh文件,将下面的代码段进行如下四步修改后拷贝进去。

  • MySql_USERMySql_PASSWORD 替换为你的 MySql 用户名和密码
  • MySql_HOST 设置为 MySql 服务器的地址,通常是 localhost
  • BINLOG_DIR 设置为本机MySql数据库的二进制日志存放目录。
#!/bin/bash# MySql 登录信息
MySql_USER="root"
MySql_PASSWORD="xxxxxx."
MySql_HOST="localhost"# 增量备份目录
INCREMENTAL_BACKUP_DIR="./backup/incremental"# 检查是否有备份文件
if [ ! -d "$INCREMENTAL_BACKUP_DIR" ]; thenecho "增量备份目录不存在: $INCREMENTAL_BACKUP_DIR"exit 1
fi# 获取所有增量备份文件(按时间顺序)
sql_files=$(ls $INCREMENTAL_BACKUP_DIR/incremental_backup_*.sql | sort)# 恢复每一个增量备份文件
for sql_file in $sql_files; doecho "正在恢复增量备份: $sql_file"MySql -u $MySql_USER -p$MySql_PASSWORD -h $MySql_HOST < $sql_fileif [ $? -ne 0 ]; thenecho "恢复 $sql_file 时出错"exit 1fi
doneecho "所有增量备份已成功恢复。"

运行脚本
给脚本添加执行权限并运行:

chmod +x backup_MySql.sh
./backup_MySql.sh

刷新后数据全部恢复成功。

相关文章:

项目需求 | MySQL增量备份与恢复的完整操作指南

目录 一、MySql数据库增量备份的工作原理 1、全量备份与增量备份 2、增量备份原理 二、进行增量备份 步骤1&#xff1a;启用二进制日志 使用 SHOW VARIABLES 命令查看二进制日志状态 步骤2&#xff1a;执行增量备份脚本 三、使用增量备份恢复损坏的数据库 步骤1&#…...

判断当前环境是否为docker容器下

判断当前环境是否为docker容器下 webshell后或登录到系统后台&#xff0c;判断是否为docker容器可使用如下方法&#xff1a; 方式一&#xff1a;使用ls -alh命令查看是否存在.dockerenv来判断是否在docker容器环境内 ls -alh /.dockerenv如下图无.dockerenv文件&#xff0c;所…...

深入理解FastAPI中的root_path:提升API部署灵活性的关键配置

在Web开发领域&#xff0c;FastAPI因其高性能、易于使用和类型提示功能而备受开发者喜爱。然而&#xff0c;当涉及到在生产环境中部署FastAPI应用程序时&#xff0c;我们常常需要面对一些挑战&#xff0c;比如如何正确处理代理服务器添加的路径前缀。这时&#xff0c;root_path…...

QLORA:高效微调量化大型语言模型

人工智能咨询培训老师叶梓 转载标明出处 传统的16位精度微调需要超过780GB的GPU内存&#xff0c;对于参数量极大的模型&#xff0c;如65B&#xff08;即650亿参数&#xff09;的模型&#xff0c;在资源有限的情况下大模型的微调几乎是不可能的。华盛顿大学的研究者团队提出了一…...

CesiumJS+SuperMap3D.js混用实现可视域分析 S3M图层加载 裁剪区域绘制

版本简介&#xff1a; cesium&#xff1a;1.99&#xff1b;Supermap3D&#xff1a;SuperMap iClient JavaScript 11i(2023)&#xff1b; 官方下载文档链家&#xff1a;SuperMap技术资源中心|为您提供全面的在线技术服务 示例参考&#xff1a;support.supermap.com.cn:8090/w…...

Fish-Speech 部署安装指南

Fish Speech 是由 Fish Audio 团队开发的一款开源文本转语音&#xff08;TTS&#xff09;模型&#xff0c;它在多语言支持和性能方面取得了显著的突破。根据证据显示&#xff0c;Fish Speech 最新版本为 1.4 版本&#xff0c;该版本不仅提升了对多种语言的支持&#xff0c;还大…...

Excel 国产化替换新方案

前言 在当前数字化转型和信创&#xff08;信息技术应用创新&#xff09;战略背景下&#xff0c;企业对于安全性、自主可控性和高效办公工具的需求日益增加。作为一款国产自主研发的高性能表格控件&#xff0c;SpreadJS 正成为替换 Excel 的最佳选择。它不仅全面支持国产化认证…...

在职研生活学习--20240908

文章目录 九月八日清晨&#xff0c;我们在鸟鸣声中醒来&#xff0c;精神饱满地迎接大汇演的挑战。上午&#xff0c;我们被分成舞龙队、旗手队、拳队、鼓队四个特色团队进行练习。阳光下&#xff0c;我们挥汗如雨&#xff0c;却乐此不疲。鼓声隆隆&#xff0c;龙舞飞扬&#xff…...

chattr:修改文件的特殊属性

​chattr ​命令用于改变文件的特殊属性&#xff0c;也称为"chattr 属性"。这些属性可以提供额外的安全性和控制&#xff0c;如设置文件为不可修改、只允许在文件末尾添加数据等。 ‍ 一、Linux 文件属性 文件属性是指与文件相关联的元数据&#xff0c;这些属性决…...

vue-router 在新的标签页打开链接/路由

前言 vue-router 在新的标签页打开链接/路由&#xff0c;由于官方没有提供对链接target属性的配置&#xff0c;要实现这个需求&#xff0c;需要自行实现&#xff0c;这里提供几个方案供参考。 调用 API vue-router 的路由实例除了常见的 push, replace, go 等接口&#xff0…...

Ansys HFSS的边界条件与激励端口

本文将介绍HFSS边界条件、激励端口,然后重点介绍连接器信号完整性仿真应用最多的波端口(wave port)及其尺寸设置要点。 HFSS (电磁仿真)边界条件 HFSS中所谓的边界并非真正意义上的边界,边界条件是指定问题区域和对象边缘的场行为接口。在HFSS的背景下,边界的存在主要有两个…...

C++:线程库

C&#xff1a;线程库 threadthreadthis_threadchrono 引用拷贝问题 mutexmutextimed_mutexrecursive_mutexlock_guardunique_lock atomicatomicCAS condition_variablecondition_variable thread 操作线程需要头文件<thread>&#xff0c;头文件包含线程相关操作&#xf…...

StarRocks实时分析数据库的基础与应用

1. 什么是 StarRocks&#xff1f; StarRocks 是一款开源的在线分析处理&#xff08;OLAP&#xff09;数据库&#xff0c;专为实时、低延迟的分析场景而设计。它以其大规模并行处理&#xff08;MPP&#xff09;架构和列式存储设计&#xff0c;极大地提高了查询性能和处理效率。…...

golang学习笔记17——golang使用go-kit框架搭建微服务详解

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

git update-ref

git update-ref 是一个低级别的 Git 命令&#xff0c;用于直接更新 Git 的引用&#xff08;refs&#xff09;。这个命令可以用来设置或删除分支、标签或其他引用的值&#xff0c;通常用于脚本或复杂的 Git 操作中。 基本用法 git update-ref <ref> <new-value> […...

学习使用在windows系统上安装nodejs以及环境配置图文教程整理

学习使用在windows系统上安装nodejs以及环境配置图文教程整理 Node.js 介绍Node.js 安装1、Node.js下载2、Node.js安装3、Node.js测试4、Node.js安装目录5、Node.js环境变量配置6、配置镜像站&#xff0c;提升速度7、检查镜像站配置8、测试环境变量是否生效9、安装cnpm Node.js…...

Hexo框架学习——从安装到配置

第一章 Hexo入门 Hexo 是一个快速、简洁且高效的博客框架。 1.1 Hexo的下载与安装 1.1.1 Hexo下载 在下载Hexo之前&#xff0c;我们需要确保电脑上已经安装好以下软件&#xff1a; Node.js (Node.js 版本需不低于 10.13&#xff0c;建议使用 Node.js 12.0 及以上版本) Git…...

搭建Windows下的Rust开发环境

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 2.1.1 安装vs_buildtools 在Windows系列操作系统中&#xff0c;Rust开发环境需要依…...

[linux 驱动]misc设备驱动详解与实战

目录 1 描述 2 结构体 2.1 miscdevice 2.2 file_operations 3 注册和注销 3.1 misc_register 3.2 misc_deregister 4 解析 misc 内核源码 4.1 核心代码 4.2 函数解析 4.2.1 class_create_file 4.2.2 class_destroy 4.2.3 register_chrdev 5 示例 5.1 简单示例 5…...

C/S架构与B/S架构的适用场景分析

C/S架构&#xff08;客户端/服务器架构&#xff09;与B/S架构&#xff08;浏览器/服务器架构&#xff09;在适用场景上各有特点&#xff0c;主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。 一、C/S架构的适用场景 1、高性能与交互性要求高的应用&…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...