项目需求 | MySQL增量备份与恢复的完整操作指南
目录
一、MySql数据库增量备份的工作原理
1、全量备份与增量备份
2、增量备份原理
二、进行增量备份
步骤1:启用二进制日志
使用 SHOW VARIABLES 命令查看二进制日志状态
步骤2:执行增量备份脚本
三、使用增量备份恢复损坏的数据库
步骤1:恢复全量备份
步骤2:执行增量恢复脚本恢复全量备份
一、MySql数据库增量备份的工作原理
1、全量备份与增量备份
在数据库管理中,备份是确保数据安全的关键步骤。数据库发生故障、数据丢失或误操作时,备份是恢复数据的唯一途径。全量备份保存整个数据库的完整副本,但随着数据量增加,备份时间和存储需求也会显著增加。相比之下,增量备份可以有效优化这一过程。增量备份仅保存自上次备份以来的变更数据,极大减少了备份时间和存储空间。特别是在数据更新频繁的业务环境中,增量备份是一种高效且经济的选择,能够快速恢复到最新的数据库状态,确保数据安全与业务连续性。
2、增量备份原理
MySql的增量备份实际上是在完成一次完整的全量备份之后,后续只备份自上次备份以来对数据库所做的变更,例如新增(INSERT)、修改(UPDATE)和删除(DELETE)操作。增量备份呢依赖于 二进制日志(Binary Logs),这些日志记录了所有对数据库的更改(如 INSERT、UPDATE 和 DELETE 操作)。在恢复数据库时,先恢复数据库的全备份,恢复到某个时间点的完整数据状态。再从前往后执行备份的增量备份日志,将数据库恢复到最新状态。
- 全备份:
- 全备份 是备份整个数据库的完整副本,通常在备份操作的起点进行。它包含所有表结构、数据等。
- 全备份创建之后,后续的备份可以依赖增量备份来减少备份的数据量和时间。
- 二进制日志(Binary Logs):
- MySql 的二进制日志是一个关键组件,它记录了所有对数据库造成更改的 SQL 语句,包括
INSERT、UPDATE、DELETE等操作。通过保存这些二进制日志,可以实现增量备份。 - 二进制日志不记录
SELECT操作,因为它们不会更改数据。
- MySql 的二进制日志是一个关键组件,它记录了所有对数据库造成更改的 SQL 语句,包括
- 增量备份:
- 增量备份不再保存整个数据库,而是通过读取并保存自上次备份以来的二进制日志文件,记录这些日志所涉及的更改。
- 增量备份通常以二进制日志文件的方式存在(如
MySql-bin.000001),也可以通过MySqlbinlog工具导出为 SQL 格式,以便日后恢复。
- 恢复过程:
- 恢复数据库时,首先应用全备份,恢复到某个时间点的完整数据状态。
- 然后,依次应用每个增量备份(即二进制日志文件),将数据库恢复到最新状态。
二、进行增量备份
步骤1:启用二进制日志
首先,确保 MySql 配置文件中启用了二进制日志功能。编辑 MySql 配置文件(my.cnf 或 my.ini)并添加以下行:
[MySqld]
log-bin=/var/log/MySql/MySql-bin
启用后,重新启动 MySql 服务:
sudo systemctl restart MySql
使用 SHOW VARIABLES 命令查看二进制日志状态
如果输出结果是 ON,说明二进制日志已开启;如果是 OFF,则表示二进制日志未启用。

步骤2:执行增量备份脚本
创建一个的bash脚本文件backup_MySql.sh,将下面的代码段进行如下四步修改后拷贝进去。
- 将
MySql_USER和MySql_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_USER和MySql_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:启用二进制日志 使用 SHOW VARIABLES 命令查看二进制日志状态 步骤2:执行增量备份脚本 三、使用增量备份恢复损坏的数据库 步骤1&#…...
判断当前环境是否为docker容器下
判断当前环境是否为docker容器下 webshell后或登录到系统后台,判断是否为docker容器可使用如下方法: 方式一:使用ls -alh命令查看是否存在.dockerenv来判断是否在docker容器环境内 ls -alh /.dockerenv如下图无.dockerenv文件,所…...
深入理解FastAPI中的root_path:提升API部署灵活性的关键配置
在Web开发领域,FastAPI因其高性能、易于使用和类型提示功能而备受开发者喜爱。然而,当涉及到在生产环境中部署FastAPI应用程序时,我们常常需要面对一些挑战,比如如何正确处理代理服务器添加的路径前缀。这时,root_path…...
QLORA:高效微调量化大型语言模型
人工智能咨询培训老师叶梓 转载标明出处 传统的16位精度微调需要超过780GB的GPU内存,对于参数量极大的模型,如65B(即650亿参数)的模型,在资源有限的情况下大模型的微调几乎是不可能的。华盛顿大学的研究者团队提出了一…...
CesiumJS+SuperMap3D.js混用实现可视域分析 S3M图层加载 裁剪区域绘制
版本简介: cesium:1.99;Supermap3D:SuperMap iClient JavaScript 11i(2023); 官方下载文档链家:SuperMap技术资源中心|为您提供全面的在线技术服务 示例参考:support.supermap.com.cn:8090/w…...
Fish-Speech 部署安装指南
Fish Speech 是由 Fish Audio 团队开发的一款开源文本转语音(TTS)模型,它在多语言支持和性能方面取得了显著的突破。根据证据显示,Fish Speech 最新版本为 1.4 版本,该版本不仅提升了对多种语言的支持,还大…...
Excel 国产化替换新方案
前言 在当前数字化转型和信创(信息技术应用创新)战略背景下,企业对于安全性、自主可控性和高效办公工具的需求日益增加。作为一款国产自主研发的高性能表格控件,SpreadJS 正成为替换 Excel 的最佳选择。它不仅全面支持国产化认证…...
在职研生活学习--20240908
文章目录 九月八日清晨,我们在鸟鸣声中醒来,精神饱满地迎接大汇演的挑战。上午,我们被分成舞龙队、旗手队、拳队、鼓队四个特色团队进行练习。阳光下,我们挥汗如雨,却乐此不疲。鼓声隆隆,龙舞飞扬ÿ…...
chattr:修改文件的特殊属性
chattr 命令用于改变文件的特殊属性,也称为"chattr 属性"。这些属性可以提供额外的安全性和控制,如设置文件为不可修改、只允许在文件末尾添加数据等。 一、Linux 文件属性 文件属性是指与文件相关联的元数据,这些属性决…...
vue-router 在新的标签页打开链接/路由
前言 vue-router 在新的标签页打开链接/路由,由于官方没有提供对链接target属性的配置,要实现这个需求,需要自行实现,这里提供几个方案供参考。 调用 API vue-router 的路由实例除了常见的 push, replace, go 等接口࿰…...
Ansys HFSS的边界条件与激励端口
本文将介绍HFSS边界条件、激励端口,然后重点介绍连接器信号完整性仿真应用最多的波端口(wave port)及其尺寸设置要点。 HFSS (电磁仿真)边界条件 HFSS中所谓的边界并非真正意义上的边界,边界条件是指定问题区域和对象边缘的场行为接口。在HFSS的背景下,边界的存在主要有两个…...
C++:线程库
C:线程库 threadthreadthis_threadchrono 引用拷贝问题 mutexmutextimed_mutexrecursive_mutexlock_guardunique_lock atomicatomicCAS condition_variablecondition_variable thread 操作线程需要头文件<thread>,头文件包含线程相关操作…...
StarRocks实时分析数据库的基础与应用
1. 什么是 StarRocks? StarRocks 是一款开源的在线分析处理(OLAP)数据库,专为实时、低延迟的分析场景而设计。它以其大规模并行处理(MPP)架构和列式存储设计,极大地提高了查询性能和处理效率。…...
golang学习笔记17——golang使用go-kit框架搭建微服务详解
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
git update-ref
git update-ref 是一个低级别的 Git 命令,用于直接更新 Git 的引用(refs)。这个命令可以用来设置或删除分支、标签或其他引用的值,通常用于脚本或复杂的 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、配置镜像站,提升速度7、检查镜像站配置8、测试环境变量是否生效9、安装cnpm Node.js…...
Hexo框架学习——从安装到配置
第一章 Hexo入门 Hexo 是一个快速、简洁且高效的博客框架。 1.1 Hexo的下载与安装 1.1.1 Hexo下载 在下载Hexo之前,我们需要确保电脑上已经安装好以下软件: Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本) Git…...
搭建Windows下的Rust开发环境
【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 2.1.1 安装vs_buildtools 在Windows系列操作系统中,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架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。 一、C/S架构的适用场景 1、高性能与交互性要求高的应用&…...
GLM-OCR模型安装包制作:将模型与服务打包成可执行文件
GLM-OCR模型安装包制作:将模型与服务打包成可执行文件 你是不是也遇到过这样的情况?自己好不容易把一个AI模型跑起来了,效果也不错,想分享给同事或者朋友用用,结果对方光是配环境、装依赖就折腾了半天,最后…...
基于PLC1200的水箱液位解耦控制系统(过程控制课程设计) #笔记学习资料 内含: 1
基于PLC1200的水箱液位解耦控制系统(过程控制课程设计) #笔记学习资料 内含: 1.PLC控制程序(博图V18) 2.设计报告(pdf版本,详细介绍整个项目设计方案、Simulink仿真模型结构图、仿真结果、PLC梯…...
VHD/VHDX差分盘:Windows系统合并、回滚与定位
VHD/VHDX差分盘:Windows系统合并、回滚与定位VHD/VHDX 差分盘是 Windows 系统中一种高效的虚拟磁盘管理技术,尤其适用于需要频繁进行系统状态回滚、软件测试或虚拟机镜像管理的场景。通过仅存储与父盘的差异数据,差分盘能够显著节省存储空间&…...
3分钟打造macOS级桌面体验:开源光标主题全攻略
3分钟打造macOS级桌面体验:开源光标主题全攻略 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 你知道吗?每天在电脑前工作8小时,你的鼠标指针会出现…...
实测2公里矿用电缆跑网络:用电力载波模块替代光纤,在井下到底靠不靠谱?
井下网络传输技术突围:电力载波在恶劣环境中的实战评估 矿场深处,昏暗潮湿的巷道里,一组工程师正为数据传输问题焦头烂额。传统光纤在煤尘弥漫的环境中频频失效,而工期又迫在眉睫。这时,有人提出了一个大胆的方案——利…...
鸿蒙Next通讯录实战:用ArkUI 3.0手把手教你打造新建联系人页面(附完整代码)
鸿蒙Next通讯录实战:用ArkUI 3.0构建企业级新建联系人页面 在移动应用开发领域,通讯录功能一直是检验开发者UI构建和数据管理能力的经典场景。鸿蒙Next作为新一代分布式操作系统,其ArkUI 3.0框架为开发者提供了声明式UI编程范式,让…...
20 分钟教你零基础部署 OpenClaw 到 Windows 电脑
1. OpenClaw 是什么? OpenClaw 是一款本地运行的 AI 自动化工具,你可以把它理解成一个 “能听懂自然语言的电脑助手”。 它不需要依赖云端服务,所有数据都存在你自己的电脑里,你只需要用中文 / 英文说一句话,它就能帮…...
突破Windows苹果设备连接限制:Apple-Mobile-Drivers-Installer的自动化驱动解决方案
突破Windows苹果设备连接限制:Apple-Mobile-Drivers-Installer的自动化驱动解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址…...
Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析
Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析 1. 像素时装锻造坊简介 像素时装锻造坊是一款融合了复古游戏美学与现代AI技术的图像生成工具。它基于Stable Diffusion和Anything-v5模型构建,专为时尚设计和像素艺术创作而…...
Wan2.2-I2V-A14B性能调优:基于算法原理的模型推理加速策略
Wan2.2-I2V-A14B性能调优:基于算法原理的模型推理加速策略 1. 效果亮点预览 在RTX4090D显卡上,经过系统调优的Wan2.2-I2V-A14B模型展现出惊人的性能提升:单次推理耗时从原始的38ms降低至22ms,吞吐量提升近72%。更令人惊喜的是&a…...

