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

MySQL物理备份

目录

 备份策略

全量备份 (Full Backup)

增量备份 (Incremental Backup)

差异备份 (Differential Backup)

使用 Percona XtraBackup

全量备份

步骤 1:全量备份

步骤 2:备份后处理(应用日志)

步骤 3:恢复备份

验证备份

增量备份

概述步骤

示例步骤

假设备份目录结构

步骤 1:全量备份

步骤 2:第一次增量备份

步骤 3:第二次增量备份

步骤 4:预处理全量备份

步骤 5:应用第一次增量备份

步骤 6:应用第二次增量备份

步骤 7:最终预处理

步骤 8:清理原数据目录

步骤 9:恢复备份到数据目录

步骤 10:调整权限

步骤 11:启动 MySQL 服务

差异备份

概述步骤

示例步骤

假设备份目录结构

步骤 1:全量备份

步骤 2:第一次差异备份

步骤 3:第二次差异备份

步骤 4:预处理全量备份

步骤 5:应用第一次差异备份

步骤 6:应用第二次差异备份

步骤 7:最终预处理

步骤 8:恢复备份到数据目录

扩展:

InnoDB Hot Backup (InnoDB 冷备份)

功能比较

1. XtraBackup

2. innobackupex

迁移与升级


 

MySQL的物理备份涉及直接复制数据库的物理文件,如数据文件、二进制日志文件等。这种备份方式通常更快捷,特别适用于大型数据库。

 备份策略

 

全量备份 (Full Backup)

定义
全量备份是对指定的数据集进行完整的备份。这意味着所有数据在备份点上都被复制,因此可以完全恢复备份时刻的整个数据库。

特点

  • 每次备份都包含所有数据。
  • 备份文件大,备份及恢复时间相对较长。
  • 容易管理,因为每个备份均可独立恢复。

适用场景

  • 小型数据库,数据量不大且可以在可接受的时间内完成备份。
  • 维护简单的备份方案。

增量备份 (Incremental Backup)

定义
增量备份是指在上次备份(无论是全量备份还是增量备份)后对变化的数据进行备份。这些变化的数据包括增加或修改的数据。

特点

  • 备份文件最小。
  • 备份速度最快,但恢复过程最复杂,需要依次应用全量备份和所有后续的增量备份。
  • 适用于数据变化频繁且备份窗口很短的情况。

适用场景

  • 大型数据库,需要最小化的备份时间和存储空间。
  • 高频率的数据变动,数据需要频繁地备份。

 

差异备份 (Differential Backup)

定义
差异备份是指在上次全量备份后,对变化的数据进行备份。这些变化的数据包括随着时间的推移被创建或修改的数据。

特点

  • 比全量备份小,但随着时间增加会变得越来越大。
  • 备份速度较快,但恢复时需要使用最近的全量备份与最新的差异备份。
  • 备份文件相对较少,便于管理。

适用场景

  • 中型数据库,需要更快的备份速度但可以接受适度复杂的恢复过程。
  • 数据变动较为频繁,每天做全量备份无法完成。

 

使用 Percona XtraBackup

Percona XtraBackup 是一种免费、开源的物理备份工具,适用于MySQL和Percona Server数据库,支持热备份。

官网:Percona XtraBackup for MySQL - Top MySQL Backup Solution

安装

yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable-only tools release
yum -y install percona-xtrabackup-80

全量备份

步骤 1:全量备份

确保 MySQL 服务正在运行
确保 MySQL 服务正在运行,这样可以进行热备份(无需停止数据库)。

systemctl status mysqld

执行全量备份
使用 xtrabackup --backup 命令来创建全量备份,并指定目标目录。

xtrabackup --backup --target-dir=/path/to/backup_dir

例如下述:

假设备份目录为 /backups/full_backup:(该目录需提前创建)

xtrabackup --backup --target-dir=/backups/full_backup

步骤 2:备份后处理(应用日志)

在进行备份时,InnoDB表的数据文件中尚有未完成的事务。要在恢复时确保数据的一致性,需要执行 --prepare 步骤。这将应用备份期间收集的所有日志文件。--prepare 或 --apply-log是一样的,用来执行相同的操作,它会应用 REDO 和 UNDO 日志,使得备份数据变得一致。

准备备份
使用 --prepare 选项应用日志。

xtrabackup --prepare --target-dir=/path/to/backup_dir

对于刚才的例子:

xtrabackup --prepare --target-dir=/backups/full_backup

完成这个步骤后,备份目录就准备好进行恢复了。

步骤 3:恢复备份

停 止 MySQL 服务
需要停止当前正在运行的 MySQL 服务以进行数据恢复。

systemctl stop mysqld

恢复数据目录

先去清理数据目录

rm -rf /var/lib/mysql/*


然后将备份内容复制到 MySQL 数据目录。目录位置在/var/lib/mysql,也可以检查你的 MySQL 配置文件(my.cnf)确认数据目录位置。

xtrabackup --copy-back --target-dir=/path/to/backup_dir

对于上方的例子:

xtrabackup --copy-back --target-dir=/backups/full_backup

检查权限
确保数据目录的所有文件都由 MySQL 用户拥有。

chown -R mysql:mysql /var/lib/mysql

启动 MySQL 服务
启动 MySQL 服务以确保还原的备份正常运行。

systemctl start mysqld

验证备份

登录 MySQL
确保 MySQL 服务已恢复并正常运行。

mysql -u root -p[密码]

验证数据
检查数据库是否已经成功恢复,运行一些查询来验证数据的完整性。

 

 

增量备份

概述步骤

  1. 全量备份:创建一个基础备份,包含当前数据库的所有数据。
  2. 第一次增量备份:基于全量备份创建增量备份,包含自全量备份以来的所有更改。
  3. 第二次增量备份:基于第一次增量备份创建增量备份,包含自第一次增量备份以来的所有更改。
  4. 预处理全量备份:将全量备份应用日志,准备合并增量备份。
  5. 应用第一次增量备份:合并第一次增量备份到全量备份中。
  6. 应用第二次增量备份:合并第二次增量备份到全量备份中。
  7. 最终预处理:确保所有更改应用,使得备份达到一致状态。
  8. 恢复备份到 MySQL 数据目录

示例步骤

假设备份目录结构
  • 全量备份目录: /backups/full_backup
  • 第一次增量备份目录: /backups/incremental_backup1
  • 第二次增量备份目录: /backups/incremental_backup2

步骤 1:全量备份

执行全量备份:

xtrabackup --backup --target-dir=/backups/full_backup

步骤 2:第一次增量备份

基于全量备份进行第一次增量备份:

xtrabackup --backup --target-dir=/backups/incremental_backup1 --incremental-basedir=/backups/full_backup

步骤 3:第二次增量备份

基于第一次增量备份进行第二次增量备份:

xtrabackup --backup --target-dir=/backups/incremental_backup2 --incremental-basedir=/backups/full_backup

步骤 4:预处理全量备份

首次预处理全量备份,应用第一次 REDO 日志:

xtrabackup --prepare --target-dir=/backups/full_backup

步骤 5:应用第一次增量备份

将第一次增量备份合并到全量备份中,并且此时只应用 REDO 日志:

xtrabackup --prepare --apply-log --redo-only --target-dir=/backups/full_backup --incremental-dir=/backups/incremental_backup1

步骤 6:应用第二次增量备份

将第二次增量备份合并到全量备份中,同样只应用 REDO 日志:

xtrabackup --prepare --apply-log --redo-only --target-dir=/backups/full_backup --incremental-dir=/backups/incremental_backup2

步骤 7:最终预处理

进行最终预处理,应用所有 REDO 和 UNDO 日志,确保数据达到一致状态:

xtrabackup --prepare --target-dir=/backups/full_backup

步骤 8:清理原数据目录

在恢复之前,清理 MySQL 数据目录:

systemctl stop mysqld
rm -rf /var/lib/mysql/*

步骤 9:恢复备份到数据目录

恢复备份数据到 MySQL 数据目录:

xtrabackup --copy-back --target-dir=/backups/full_backup

步骤 10:调整权限

确保 MySQL 数据目录权限正确:

sudo chown -R mysql:mysql /var/lib/mysql

步骤 11:启动 MySQL 服务

重新启动 MySQL 服务:

systemctl start mysqld

 

差异备份

差异备份(Differential Backup)是指在某个基准点(通常是全量备份)之后,只备份自基准点以来发生了变化的所有数据。与增量备份不同的是,差异备份总是基于同一个基准点,而增量备份则是基于上一个备份。

概述步骤

  1. 进行全量备份:创建初始的全量备份,作为基准点。
  2. 进行第一次差异备份:自全量备份以来的所有变化。
  3. 进行第二次差异备份:自全量备份以来的所有变化。
  4. 预处理全量备份:准备和合并差异备份。
  5. 应用第一次差异备份:将第一次差异备份合并到全量备份。
  6. 应用第二次差异备份:将第二次差异备份合并到全量备份。
  7. 最终预处理:确保所有更改应用,使得备份达到一致状态。
  8. 恢复备份到 MySQL 数据目录

示例步骤

假设备份目录结构
  • 全量备份目录: /backups/full_backup
  • 第一次差异备份目录: /backups/differential_backup1
  • 第二次差异备份目录: /backups/differential_backup2

 

步骤 1:全量备份

执行全量备份:

xtrabackup --backup --target-dir=/backups/full_backup

步骤 2:第一次差异备份

进行第一次差异备份,基于全量备份:

xtrabackup --backup --target-dir=/backups/differential_backup1 --incremental-basedir=/backups/full_backup

步骤 3:第二次差异备份

进行第二次差异备份,仍然基于全量备份:

xtrabackup --backup --target-dir=/backups/differential_backup2 --incremental-basedir=/backups/full_backup

步骤 4:预处理全量备份

首次预处理全量备份,准备合并差异备份:

xtrabackup --prepare --target-dir=/backups/full_backup

步骤 5:应用第一次差异备份

将第一次差异备份合并到全量备份中,并且此时只应用 REDO 日志:

xtrabackup --prepare --apply-log --redo-only --target-dir=/backups/full_backup --incremental-dir=/backups/differential_backup1

步骤 6:应用第二次差异备份

将第二次差异备份合并到全量备份中,仍然只应用 REDO 日志:

xtrabackup --prepare --apply-log --redo-only --target-dir=/backups/full_backup --incremental-dir=/backups/differential_backup2

步骤 7:最终预处理

进行最终预处理,应用所有 REDO 和 UNDO 日志,确保数据达到一致状态:

xtrabackup --prepare --target-dir=/backups/full_backup

步骤 8:恢复备份到数据目录

清理 MySQL 数据目录,然后恢复备份数据:

systemctl stop mysqld
rm -rf /var/lib/mysql/*xtrabackup --copy-back --target-dir=/backups/full_backupchown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

 

扩展:

XtraBackup 和 innobackupex 都是用于 MySQL 和 MariaDB 数据库的一致性备份工具。它们都由 Percona 提供,并常用于对 InnoDB 存储引擎进行热备份(即在数据库运行时进行备份)。不过,它们之间还是有一些显著的区别。

InnoDB Hot Backup (InnoDB 冷备份)

  • XtraBackup

    • 是一个专门用于对 InnoDB 存储引擎进行热备份的命令行工具。它比较简洁,功能专一,但对于复杂的备份操作可能需要更多的手动配置或者结合其他工具使用。
  • innobackupex

    • 是 Percona XtraBackup 中的一个 Perl 脚本,它实际上是一个高级封装,使用 XtraBackup 来实现具体的备份和恢复操作。innobackupex 增加了一些便利功能,例如备份 MyISAM 表,但因为 MyISAM 表备份期间需要静态锁定,所以不算是真正的“热备份”。

功能比较

1. XtraBackup

  • 优势
    • 简单直接:直接进行 InnoDB 存储引擎的数据备份。
    • 更高效:更少的额外依赖,直接进入备份行为。
    • 控制精确:对于高级用户可以提供更多的控制选项。
  • 限制
    • 需要更多配置:可能需要更多的手动步骤来完成备份计划。
    • 通用性较低:不像 innobackupex 那样能够同时处理多种存储引擎。

2. innobackupex

  • 优势

    • 易用性高:封装了更多功能,用户友好性更高。
    • 处理多种存储引擎:可以同时备份 InnoDB 和 MyISAM 表(尽管 MyISAM 表不能完全称作“热备份”)。
    • 包含详细的日志信息:更便于进行备份和恢复操作的调试。
  • 限制

    • 额外的脚本消耗:因为 innobackupex 是一个脚本,相对会多出一些开销。
    • 未来更新:使用 Perl 脚本可能在跨平台支持上有所限制,且潜在影响工具的维护和更新。

迁移与升级

事实上,随着时间的推移,innobackupex 已被官方弃用,Percona 强烈建议用户直接使用 XtraBackup。因此,在现代环境中,有可能需要将已有 innobackupex 脚本和操作迁移到使用 XtraBackup。

相关文章:

MySQL物理备份

目录 备份策略 全量备份 (Full Backup) 增量备份 (Incremental Backup) 差异备份 (Differential Backup) 使用 Percona XtraBackup 全量备份 步骤 1:全量备份 步骤 2:备份后处理(应用日志) 步骤 3:恢复备份 验…...

AWT常用组件

AWT中常用组件 前言一、基本组件组件名标签(Label类)Label类的构造方法注意要点 按钮(Button)Button的构造方法注意要点 文本框(TextField)TextField类的构造方法注意要点 文本域(TextArea)TextArea 的构造方法参数scrollbars的静态常量值 复选框&#x…...

CorelDRAW2024破解激活码序列号一步到位

亲们,今天给大家种草一个神奇的软件——CorelDRAW破解2024最新版!🎨这是一款专业级的矢量图形设计软件,无论你是平面设计师、插画师还是设计师,都能在这个软件中找到你需要的工具和功能。✨ 让我来给大家介绍一下这款软…...

Webpack前端打包工具详解

目录 Webpack前端打包工具详解一、Webpack 的作用二、Webpack 的安装和基本使用1. 安装 Webpack2. 创建 Webpack 配置文件3. 运行 Webpack 三、Webpack 核心概念1. 入口(Entry)2. 输出(Output)3. 加载器(Loaders&#…...

计网总结☞网络层

.................................................. 思维导图 ........................................................... 【Wan口和Lan口】 WAN口(Wide Area Network port): 1)用于连接外部网络,如互联…...

【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)

便捷、高效的在线调研与考试新选择​ 云调查考试问卷是一款基于FastAdminThinkPHPUniapp开发的问卷调查考试软件,可以自由让每一个用户自由发起调查问卷、考试问卷。发布的问卷允许控制问卷的搜集、回答等各个环节的设置,同时支持系统模板问卷&#xff…...

网络安全难学吗?2024该怎么系统学习网络安全?

学习网络安全需要循序渐进,由浅入深。很多人对网络安全进行了解以后,就打算开始学习网络安全,但是又不知道怎么去系统的学习。 网络安全本身的知识不难,但需要学习的内容有很多,其中包括Linux、数据库、渗透测试、等保…...

2 程序的灵魂—算法-2.4 怎样表示一个算法-2.4.6 用计算机语言表示算法

我们的任务是用计算机解题&#xff0c;就是用计算机实现算法&#xff1b; 用计算机语言表示算法必须严格遵循所用语言的语法规则。 【例 2.20】求 12345 用 C 语言表示。 main() {int i,t; t1; i2; while(i<5) {tt*i; ii1; } printf(“%d”,t); } 【例 2.21】求级数的…...

重生之我要精通JAVA--第八周笔记

文章目录 多线程线程的状态线程池自定义线程池最大并行数多线程小练习 网络编程BS架构优缺点CS架构优缺点三要素IP特殊IP常用的CMD命令 InetAddress类端口号协议UDP协议&#xff08;重点&#xff09;UDP三种通信方式 TCP协议&#xff08;重点&#xff09;三次握手四次挥手 反射…...

51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述 独立按键控制LED灯&#xff0c;按键按一次亮&#xff0c;再按一次灭 2、实验原理 轻触按键:相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开&#xff1b;…...

【上海大学计算机组成原理实验报告】七、程序转移机制

一、实验目的 学习实现程序转移的硬件机制。 掌握堆栈寄存器的使用。 二、实验原理 根据实验指导书的相关内容&#xff0c;实验箱系统的程序转移硬件机制在于&#xff0c;当LDPC有效时&#xff0c;如果此时DUBS上的值就是转移的目标地址&#xff0c;则此目标地址被打入PC&am…...

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...

修复www服务trace漏洞

验证方式&#xff1a;curl -v -X TRACE ip:port&#xff0c;或使用其他接口调试工具如Postman 响应&#xff1a;状态行405 Method Not Allowed且响应体无内容 方案一&#xff1a;使用过滤器 若webserver是tomcat, 添加过滤器的方式有很多 Component public class TraceHttpMe…...

算法:101. 对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中节…...

wordpress 使用api发布文章

1.安装插件 在/wp-content/plugins/目录执行以下命令 $ sudo git clone https://github.com/WP-API/Basic-Auth.git 2.Python脚本 import requestsurl http://www.ziyuanwang.online/wp-json/wp/v2/postsuser adminpassword xxxxxheaders {Content-Type: application/j…...

《Brave New Words 》2.2 阅读理解的未来,让文字生动起来!

Part II: Giving Voice to the Social Sciences 第二部分&#xff1a;为社会科学发声 The Future of Reading Comprehension, Where Literature Comes Alive! 阅读理解的未来&#xff0c;让文字生动起来&#xff01; Saanvi, a ninth grader in India who attends Khan World S…...

基于Java的超市进销存管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java JSP Servlet JavaBean 工具&#xff1a; IDEA/Eclipse、…...

Oracle 日志挖掘

oracle 11g 日志挖掘测试 需要开启补充日志 alter database add supplemental log data; SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;在用户下执行一些删除&#xff0c;插入等操作 SQL> create table zxy( …...

翻转二叉树-力扣

翻转二叉树&#xff0c;通过前序遍历的顺序&#xff0c;从根节点开始&#xff0c;将节点的左右子节点一次进行交换即可。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), …...

办公风云颜值背后的职场正能量

办公风云&#xff1a;颜值背后的职场正能量当我们提到职场&#xff0c;脑海中浮现的往往是严肃的面孔、忙碌的身影和堆积如山的文件。但在这个看似单调的舞台上&#xff0c;总有一些人&#xff0c;用他们的颜值和才华&#xff0c;为我们上演了一场场别开生面的“大戏”。今天&a…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...