目录

前言

一、备份概述

(一)备份方式

(二)备份策略

二、物理备份及恢复

(一)备份操作

(二)恢复操作

三、逻辑备份及恢复

(一)逻辑备份

(二)逻辑恢复

(三)mysqldump局限性

四、环境准备

(一)软件介绍​编辑

(二)安装软件

六、增量备份与恢复

(一)增量备份

首次完全备份

增量备份

(二)增量恢复

准备全量备份 

合并增量备份

恢复数据

七、差异备份与恢复

(一)差异备份

首次完全备份

差异备份

(二)差异恢复

准备全量备份

合并差异备份

恢复数据

八、数据实时备份与恢复

(一)binlog日志管理

日志介绍

启用bin-log

创建新日志文件

 日志文件常用管理命令

(二)备份数据

备份单个库

备份所有库

(三)恢复数据

恢复所有数据

恢复部分数据

(四)注意事项


前言

  • 如果有需要了解MySQL的基础使用,如查询和表管理的可以参考MySQL技术笔记-从基础配置到高级查询的全栈实战指南、MySQL技术笔记-表结构设计与管理的完整指南

一、备份概述

(一)备份方式

  • 按照数据库服务状态分类
类型说明优点缺点
冷备份在数据库服务停止状态下进行备份,直接复制数据文件数据一致性强,备份过程简单服务中断,影响业务连续性
热备份在数据库服务运行状态下进行备份,无需停机不影响业务运行,适合高可用场景数据可能存在短暂不一致备份复杂度较高
温备份在数据库运行状态下进行的备份操作,但备份过程中会短暂阻塞数据库的写操作,以保证数据一致性(mysqldump无需停止数据库服务,通过短暂阻塞写操作,确保备份数据的一致性,适用于数据一致性要求较高、写入压力适中的业务系统写入压力较大的业务可能因阻塞而产生延迟
  • 按照备份的数据分类
类型说明优点缺点
物理备份直接复制数据库的物理文件(如 .ibd.frm 文件)恢复速度快,适合大数据量跨平台兼容性差,备份文件体积大
逻辑备份导出数据库中的数据为 SQL 脚本(如 mysqldump跨平台兼容性好,适合数据迁移备份和恢复速度较慢,依赖 SQL 解析

(二)备份策略

  • 备份系统的三要素
要素全称含义说明
BWBackup Window(备份窗口)在一个工作周期内,系统可用于执行备份操作的时间范围备份窗口越短,对业务影响越小
RPORecovery Point Objective(恢复点目标)在发生故障时,企业可接受的最大数据丢失量RPO 越小,数据丢失越少
RTORecovery Time Objective(恢复时间目标)在发生故障时,企业可接受的最长系统恢复时间RTO 越短,业务中断时间越短
  • 灾备系统建设国际标准(SHARE 78
级别描述恢复能力适用场景
0无备份,无恢复能力无法恢复不建议
1本地磁带备份恢复时间长小型企业
2远程磁带备份恢复时间较短中型企业
3远程磁盘备份恢复时间更短大型企业
4远程热备中心快速恢复高可用需求
5实时数据复制数据几乎无丢失金融、电商等关键业务
6实时复制 + 完整IT基础设施快速切换数据中心级容灾
7实时复制 + 完整IT基础设施 + 应用零中断最高级别容灾

二、物理备份及恢复

(一)备份操作

  • 使用cp命令备份
    cp -r /var/lib/mysql /备份目录/mysql.bak
  • 使用tar命令备份
    tar -zcf /root/mysql.tar.gz /var/lib/mysql/*

(二)恢复操作

  • 使用cp命令恢复
    cp -r 备份目录/mysql.bak /var/lib/mysql/
  • 使用tar命令恢复
    tar -zxf /root/mysql.tar.gz -C /var/lib/mysql/
  • 修改文件所有权
    chown -R mysql:mysql /var/lib/mysql  # 确保MySQL对目录和目录下的文件有读权限

三、逻辑备份及恢复

(一)逻辑备份

  • 备份操作
    mysqldump -uroot -p密码 库名 > /目录/xxx.sql
  • 库名表示方式
    • 库名 表名列表:备份1张表或多张表所有数据。
    • -B 库名列表:备份1个库或多个库所有数据。
    • --all-databases-A:备份1台服务器所有数据
  • 示例:
    mysqldump -uroot -ptest -A > /bakdir/all_backup.sql

(二)逻辑恢复

  • 恢复操作
    mysql -uroot -p密码 [库名] < /目录/名.sql
  • 示例:
    mysqldump -uroot -pa test users > /test_users.sql
    mysqldump -uroot -pa -B test > /test.sql
    mysql -uroot -pa test < /test_users.sql
    mysql -uroot -pa < /test.sql
  • 注意
    • 恢复库时库名可以省略
    • 备份和恢复时,数据库服务必须是运行状态
    • 覆盖恢复数据时需谨慎操作,确保数据安全。

(三)mysqldump局限性

  • 物理备份缺点
    • 跨平台性差。
    • 备份时间长、冗余备份、浪费存储空间
    •  物理备份通常只能恢复整个数据库实例,无法单独恢复某个库或表,灵活性不如逻辑备份。
  • mysqldump备份缺点
    •  恢复效率低,导入大数据量时耗时较长 。
    • 备份速度较慢,尤其在大数据量场景下性能不佳  。
    • 锁表,备份过程中数据插入和更新操作被阻塞。
    •  不支持增量备份,仅支持全量逻辑备份 。
    • 对于大规模数据库,备份文件体积较大,占用存储资源 。
    •  备份过程中可能对数据库性能产生影响 。

四、环境准备

(一)软件介绍

  • Percona XtraBackup:一款强大的在线热备份工具,备份过程中不锁库表,适合生产环境。由专业组织Percona提供(改进MySQL分支)。

(二)安装软件

  • 安装依赖
    yum -y install perl-DBD-MySQL
  • 解压软件
    tar -xf percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz
    mv percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12 /usr/local/percona
  • 配置环境变量
    echo 'export PATH=/usr/local/percona/bin:$PATH' >> /etc/bashrc
    source /etc/bashrc

五、增量备份与恢复

(一)增量备份

首次完全备份

xtrabackup --host=127.0.0.1 --user=用户名 --password=密码 --backup --target-dir=备份目录 --datadir=数据库目录
#完全备份就是每次进行备份都只执行该操作
  • 示例:

xtrabackup --host=127.0.0.1 --user=root --password=test --backup --target-dir=/basement --datadir=/var/lib/mysql

增量备份

xtrabackup --host=127.0.0.1 --user=用户名 --password=密码 --backup --target-dir=备份目录 --incremental-basedir=参考目录 --datadir=数据库目录
  • 示例:
    xtrabackup --host=127.0.0.1 --user=root --password=test --backup --target-dir=/inc1 --incremental-basedir=/basement --datadir=/var/lib/mysql

(二)增量恢复

准备全量备份 

xtrabackup --prepare --apply-log-only --target-dir=/完全备份目录 
#--apply-log-only 参数,确保未提交的事务不被回滚,以便后续合并增量备份。 
  • 示例:
xtrabackup --prepare --apply-log-only --target-dir=/basement

合并增量备份

xtrabackup --prepare --apply-log-only \
--target-dir=/完全备份目录 \
--incremental-dir=/增量备份目录
#将增量备份的数据合并到全量备份目录中,确保数据一致性。
#如果有多个增量备份需要将每个增量备份按照先后顺序和完全备份进行合并
  • 示例:
xtrabackup --prepare --apply-log-only \
--target-dir=/basement \
--incremental-dir=/inc1

恢复数据

xtrabackup --copy-back --target-dir=/完全备份目录
#--copy-back 将准备好的备份数据复制回 MySQL 的数据目录。
  • 示例:
xtrabackup --copy-back --target-dir=/basement
  • 注意事项
    • 执行恢复前,务必清空 MySQL 数据目录(如 /var/lib/mysql),避免数据冲突。
    • 恢复完成后,需修改数据目录权限为 mysql:mysql,并重启 MySQL 服务
      chown -R mysql:mysql /var/lib/mysql
      systemctl restart mysqld

六、差异备份与恢复

(一)差异备份

首次完全备份

xtrabackup --host=127.0.0.1 --user=用户名 --password=密码 --backup --target-dir=/备份目录 --datadir=/数据库目录
  • 示例:
    xtrabackup --host=127.0.0.1 --user=root --password=test --backup --target-dir=/fullbackup --datadir=/var/lib/mysql

差异备份

xtrabackup --host=127.0.0.1 --user=用户名 --password=密码 --backup --target-dir=/备份目录 --incremental-basedir=/完全备份目录 --datadir=/数据库目录
#每次差异备份都是以上次全量或差异备份为基础
  • 示例:
    xtrabackup --host=127.0.0.1 --user=root --password=test --backup --target-dir=/diff_1 --incremental-basedir=/fullbackup --datadir=/var/lib/mysql

(二)差异恢复

准备全量备份

xtrabackup --prepare --apply-log-only --target-dir=/完全备份目录
  • 示例
    xtrabackup --prepare --apply-log-only --target-dir=/fullbackup

合并差异备份

xtrabackup --prepare --apply-log-only --target-dir=/完全备份目录 --incremental-dir=/最后一次差异备份
#只要和最后一次差异备份合并即可,因为最后一次差异备份包括之前所有差异备份的数据
  • 示例
    xtrabackup --prepare --apply-log-only \
    --target-dir=/fullbackup \
    --incremental-dir=/diff_1

恢复数据

xtrabackup --copy-back --target-dir=/完全备份目录
  • 示例
    xtrabackup --copy-back --target-dir=/fullbackup
  • 注意事项
    • 执行恢复前,务必清空 MySQL 数据目录(如 /var/lib/mysql),避免数据冲突。
    • 恢复完成后,需修改数据目录权限为 mysql:mysql,并重启 MySQL 服务
      chown -R mysql:mysql /var/lib/mysql
      systemctl restart mysqld

七、数据实时备份与恢复

(一)binlog日志管理

日志介绍

  • 什么是binlog日志
    • 又称“二进制日志”,是MySQL服务生成的日志文件之一。
    • 记录除查询语句(SELECT、SHOW等)以外的所有SQL命令,包括INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
    • 主要用于数据恢复、数据复制以及主从同步
    • 启用binlog是实现MySQL主从复制的必要条件

启用bin-log

  • 日志默认启用:日志默认存储在/var/lib/mysql/目录下。
  • 自定义日志
  • 示例
    mkdir /mylog            # 创建目录
    vim /etc/my.cnf.d/mysql-server.cnf  #修改配置
    #添加
    [mysqld]
    log-bin=/mylog/mysql-binchown mysql:mysql /mylog  # 修改目录的所有者为mysql
    setenforce 0            # 关闭selinux
    systemctl restart mysqld  # 重启服务

创建新日志文件

  • 默认容量:Binlog日志文件默认1G容量,超出后会自动创建新日志。
  • 手动创建
    FLUSH LOGS;
    或者
    systemctl restart mysqld

 日志文件常用管理命令

  • 查看正在使用的日志
    SHOW MASTER STATUS;
  • 查看已有的日志文件
    SHOW BINARY LOGS;
  • 删除编号之前的日志
    PURGE MASTER LOGS TO "日志名";
  • 示例
    PURGE MASTER LOGS TO "mysql-bin.000004";
  • 删除所有日志,重新创建日志
    RESET MASTER;
  • 查看日志文件内容
    SHOW BINLOG EVENTS IN "日志文件名";
  •  示例
    SHOW BINLOG EVENTS IN "mysql-000004";

(二)备份数据

备份单个库

mysqldump -uroot -p密码 --flush-logs -B test > /single.sql

备份所有库

mysqldump -uroot -p密码 --flush-logs -A > /all.sql

(三)恢复数据

恢复所有数据

mysqlbinlog /目录/文件名 | mysql -uroot -p密码 #查看文件全部内容并通过管道导入数据库中
  • 示例
    mysqlbinlog /mylog/mysql-bin.000001 | mysql -uroot -ptest

恢复部分数据

mysqlbinlog --start-datetime="开始时间" --stop-datetime="结束时间" /目录/文件名 | mysql -uroot -p密码
  • 示例
    mysqlbinlog --start-datetime="2025-06-01 00:00:00" --stop-datetime="2025-07-10 23:59:59" /mylog/mysql-bin.000001 | mysql -uroot -ptest

(四)注意事项

  • 备份时
    • 确保备份目录有足够的空间
    • 定期检查备份文件的完整性和可用性。
  • 恢复时
    • 确保恢复操作不会影响生产环境
    • 恢复前备份当前数据库状态,以防恢复失败。
    • 确保恢复后数据一致性

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot或OpenFeign中 Jackson 配置参数名蛇形、小驼峰、大驼峰、自定义命名

SpringBoot或OpenFeign中 Jackson 配置参数名蛇形、小驼峰、大驼峰、自定义命名 前言 在调用外部接口时&#xff0c;对方给出的接口文档中&#xff0c;入参参数名一会大写加下划线&#xff0c;一会又是驼峰命名。 示例如下&#xff1a; {"MOF_DIV_CODE": "xx…

uni-app 途径站点组件开发与实现分享

在移动应用开发中&#xff0c;涉及到出行、物流等场景时&#xff0c;途径站点的展示是一个常见的需求。本文将为大家分享一个基于 uni-app 开发的途径站点组件&#xff0c;该组件能够清晰展示路线中的各个站点信息&#xff0c;包括站点名称、到达时间、是否已到达等状态&#x…

kotlin中集合的用法

从一个实际应用看起以下kotlin中代码语法正确吗 var testBeanAIP0200()var testList:List<AIP0200> ArrayList()testList.add(testBean)这段Kotlin代码存在语法错误&#xff0c;主要问题在于&#xff1a;List<AIP0200> 是Kotlin中的不可变集合接口&#xff0c;不能…

深入理解 Java Map 与 Set

文章目录前言1. 搜索树1.1 什么是搜索树1.2 查找1.3 插入1.4 删除情况一&#xff1a;cur 没有子节点&#xff08;即为叶子节点&#xff09;情况二&#xff1a;cur 只有一个子节点&#xff08;只有左子树或右子树&#xff09;情况三&#xff1a;cur 有两个子节点&#xff08;左右…

excel如何只保留前几行

方法一&#xff1a;手动删除多余行 选中你想保留的最后一行的下一行&#xff08;比如你只保留前10行&#xff0c;那选第11行&#xff09;。按住 Shift Ctrl ↓&#xff08;Windows&#xff09;或 Shift Command ↓&#xff08;Mac&#xff09;&#xff0c;选中从第11行到最…

实时连接,精准监控:风丘科技数据远程显示方案提升试验车队管理效率

风丘科技推出的数据远程实时显示方案更好地满足了客户对于试验车队远程实时监控的需求&#xff0c;并真正实现了试验车队的远程管理。随着新的数据记录仪软件IPEmotion RT和相应的跨平台显示解决方案的引入&#xff0c;让我们的客户端不仅可在线访问记录器系统状态&#xff0c;…

灰盒级SOA测试工具Parasoft SOAtest重新定义端到端测试

还在为脆弱的测试环境、强外部依赖和低效的测试复用拖慢交付而头疼&#xff1f;尤其在银行、医疗、制造等关键领域&#xff0c;传统的端到端测试常因环境不稳、接口难模拟、用例难共享而举步维艰。 灰盒级SOA测试工具Parasoft SOAtest以可视化编排简化复杂测试流程&#xff0c…

OKHttp 核心知识点详解

OKHttp 核心知识点详解 一、基本概念与架构 1. OKHttp 简介 类型&#xff1a;高效的HTTP客户端特点&#xff1a; 支持HTTP/2和SPDY&#xff08;多路复用&#xff09;连接池减少请求延迟透明的GZIP压缩响应缓存自动恢复网络故障2. 核心组件组件功能OkHttpClient客户端入口&#…

从“被动巡检”到“主动预警”:塔能物联运维平台重构路灯管理模式

从以往的‘被动巡检’转变至如今的‘主动预警’&#xff0c;塔能物联运维平台对路灯管理模式展开了重新构建。城市路灯属于极为重要的市政基础设施范畴&#xff0c;它的实际运行状态和市民出行安全以及城市形象有着直接且紧密的关联。不过呢&#xff0c;传统的路灯管理模式当下…

10. 常见的 http 状态码有哪些

总结 1xx: 正在处理2xx: 成功3xx: 重定向&#xff0c;302 重定向&#xff0c;304 协商缓存4xx: 客户端错误&#xff0c;401 未登录&#xff0c;403 没权限&#xff0c;404 资源不存在5xx: 服务器错误常见的 HTTP 状态码详解 HTTP 状态码&#xff08;HTTP Status Code&#xff0…

springBoot对接第三方系统

yml文件 yun:ip: port: username: password: controller package com.ruoyi.web.controller.materials;import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.materials.service.IYunService; import o…

【PTA数据结构 | C语言版】车厢重排

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 一列挂有 n 节车厢&#xff08;编号从 1 到 n&#xff09;的货运列车途径 n 个车站&#xff0c;计划在行车途中将各节车厢停放在不同的车站。假设 n 个车站的编号从 1 到 n&#xff0c;货运列车按照…

量子计算能为我们做什么?

科技公司正斥资数十亿美元投入量子计算领域&#xff0c;尽管这项技术距离实际应用还有数年时间。那么&#xff0c;未来的量子计算机将用于哪些方面&#xff1f;为何众多专家坚信它们会带来颠覆性变革&#xff1f; 自 20 世纪 80 年代起&#xff0c;打造一台利用量子力学独特性质…

BKD 树(Block KD-Tree)Lucene

BKD 树&#xff08;Block KD-Tree&#xff09;是 Lucene 用来存储和快速查询 **多维数值型数据** 的一种磁盘友好型数据结构&#xff0c;可以把它想成&#xff1a;> **“把 KD-Tree 分块压缩后落到磁盘上&#xff0c;既能做磁盘顺序读&#xff0c;又能像内存 KD-Tree 一样做…

【Mysql作业】

第一次作业要求1.首先打开Windows PowerShell2.连接到MYSQL服务器3.执行以下SQL语句&#xff1a;-- 创建数据库 CREATE DATABASE mydb6_product;-- 使用数据库 USE mydb6_product;-- 创建employees表 CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,ag…

(C++)STL:list认识与使用全解析

本篇基于https://cplusplus.com/reference/list/list/讲解 认识 list是一个带头结点的双向循环链表翻译总结&#xff1a; 序列容器&#xff1a;list是一种序列容器&#xff0c;允许在序列的任何位置进行常数时间的插入和删除操作。双向迭代&#xff1a;list支持双向迭代&#x…

Bash函数详解

目录**1. 基础函数****2. 参数处理函数****3. 文件操作函数****4. 日志与错误处理****5. 实用工具函数****6. 高级函数技巧****7. 常用函数库示例****总结&#xff1a;Bash 函数核心要点**1. 基础函数 1.1 定义与调用 可以自定义函数名称&#xff0c;例如将greet改为yana。❌…

Python爬虫实战:研究rows库相关技术

1. 引言 在当今数字化时代,互联网上存在着大量有价值的表格数据,这些数据以 HTML 表格、CSV、Excel 等多种格式存在。然而,由于数据源的多样性和不规范性,表格结构往往存在复杂表头、合并单元格、不规则数据行等问题,给数据的自动化处理带来了巨大挑战。 传统的数据处理工…

通过同态加密实现可编程隐私和链上合规

1. 引言 2023年9月28日&#xff0c;a16z 的加密团队发布了 Nakamoto Challenge&#xff0c;列出了区块链中需要解决的最重要问题。尤其是其中的第四个问题格外引人注意&#xff1a;“合规的可编程隐私”&#xff0c;因为Zama团队已经在这方面积极思考了一段时间。本文提出了使…

封装---统一封装处理页面标题

一.采用工具来实现(setPageTitle.ts)多个页面中用更统一的方式设置 document.title&#xff0c;可以封装一个工具函数:在utils目录下新建文件:setPageTitle.ts如果要在每个页面设置相同的网站标志可以使用下面的appNameconst appName: string import.meta.env.VITE_APP_NAMEex…