【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
全局流量管理 GTM,标准版 1个月
简介: 【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)

检索binlog文件内容

按照位置截取binlog内容

按照位置截取 binlog 内容的优点是可以实现精确的截取,但是在选择位置时可能会花费一些时间。例如,如果要截取 "backup-bin.000009" 文件从位置 365 到位置 465 的日志,可以使用以下命令:

bash

复制代码

mysqlbinlog backup-bin.000009 --start-position=365 --stop-position=465 -r pos.sql

注意要点

  • 起始位置必须存在于 binlog 中,而结束位置点可以不存在。
  • 如果指定了起始位置而没有指定结束位置,则会截取从起始位置到文件结尾的所有 binlog 日志:

bash

复制代码

mysqlbinlog backup-bin.000009 --start-position=365 -r pos.sql
  • 如果指定了结束位置而没有指定起始位置,则会截取从文件开头到指定结束位置的所有 binlog 日志:

bash

复制代码

mysqlbinlog backup-bin.000009 --stop-position=465 -r pos.sql

在这里,位置点指的是 mysqlbinlog 解析文件时每一行开头的 "#at 数字" 标识的数据。通过指定起始位置和结束位置,可以根据具体需求来截取所需要的 binlog 内容。

优化后的内容如下:

按照位置截取 binlog 内容的优点是可以实现精确的截取,但是在选择位置时可能会花费一些时间。例如,如果要截取 "dadong-bin.000009" 文件从位置 365 到位置 465 的日志,可以使用以下命令:

css

复制代码

[root@DB02 ~]# mysqlbinlog dadong-bin.000009 --start-position=365 --stop-position=465 -r pos.sql

案例分析

以下是一些示例,演示了如何根据不同的条件来截取部分 binlog:

按位置截取 binlog

bash

复制代码

mysqlbinlog backup-bin.000009 --start-position=365 --stop-position=456 -r pos.sql
mysqlbinlog backup-bin.000005 --start-position=2265 --stop-position=2552 -r pos.sql
mysqlbinlog backup-bin.000009 --start-position=365 --stop-position=456 -r pos.sql
mysqlbinlog backup-bin.000009 --start-position=365 -r pos.sql
mysqlbinlog backup-bin.000009 --stop-position=456 -r pos.sql

按时间截取 binlog

bash

复制代码

mysqlbinlog backup-bin.000009 --start-datetime='2022-10-16 17:14:15' --stop-datetime='2022-10-16 17:15:15' -r time.sql
mysqlbinlog backup-bin.000009 --start-datetime='2022-10-16 17:14:15'  -r time.sql
mysqlbinlog backup-bin.000009  --stop-datetime='2022-10-16 17:15:15' -r time.sql

注意:

  • 使用上述命令时,替换 backup-bin.000009 中的文件名为实际的文件名。
  • 对于按位置截取,可以指定起始位置和/或结束位置来截取指定的 binlog 内容。
  • 对于按时间截取,可以指定起始时间和/或结束时间来截取在指定时间范围内的 binlog 内容。

根据具体需求,在 --start-position--stop-position--start-datetime--stop-datetime 参数中填入正确的值,以实现所需的截取操作。

mysqlbinlog -F 是一个用于解析和显示 MySQL 二进制日志的命令。-F 参数用于指定二进制日志文件的格式。

根据MySQL文档,-F 参数可以有以下几个选项:

  • --base64-output=value:设置输出格式为Base64编码的二进制日志。
  • --hexdump:以十六进制格式显示二进制日志内容。
  • --skip-gtids:忽略GTID (全局事务标识符)。

请根据您的具体需求选择适当的 -F 参数,并将其附加到 mysqlbinlog 命令后面使用。

MySQLbinlog命令常用参数:
参数 说明
-d, --database=name 根据指定库拆分binlog(拆分单表binlog可通过SQL关键字过滤)
-r, --result-file=name 指定解析binlog输出SQL语句的文件
-R, --read-from-remote-server 从mysql服务器读取binlog日志,是下面参数的别名
-j, --start-position=# 读取binlog的起始位置点,#号是具体的位置点
--stop-position=# 读取binlog的停止位置点,#号是具体的位置点
--start-datetime=name 读取binlog的起始位置点,name是具体的时间,格式为:2022-12-25 11:25:26
--stop-datetime=name 读取binlog的停止位置点,name是具体的时间,格式为:2022-12-25 11:25:26
--base64-output=decode-rows 解析row级别binlog日志的方法,例如:mysqlbinlog --base64-output=decode-rows -v mysqlbin.000016

通过binlog恢复数据

执行增量恢复

在新的MySQL实例上执行增量恢复操作。假设要从位置"binlog_file",偏移量"binlog_position"开始进行恢复,执行以下命令:

sql

复制代码

mysqlbinlog --start-position=binlog_position binlog_file | mysql -h hostname -u username -p
  • 替换以下参数: - binlog_file:要恢复的二进制日志文件名。 - binlog_position:要恢复的二进制日志文件的起始位置。 - hostname:数据库服务器的主机名。 - username:具有创建和修改表结构权限的MySQL用户。
  • 验证数据恢复:
  • 在新的MySQL实例上查询和验证恢复的数据是否正确。

xtrabackup安装部署

xtrabackup

Percona为MySQL、PostgreSQL和MongoDB提供免费的开源软件。有关具体细节,请访问各个产品页面,在那里您还可以找到我们所有主要开源软件产品的当前文档。

官方网站:https://www.percona.com/downloads



下载和安装

普通下载安装

下载 RPM 安装包

运行以下命令下载 Percona XtraBackup 的 RPM 安装包:

bash

复制代码

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.3/binary/redhat/6/x86_64/percona-xtrabackup-2.3.3-1.el6.x86_64.rpm

安装依赖

运行以下命令安装 Percona XtraBackup 的依赖项:

bash

复制代码

yum install -y perl-DBD-MySQL per-DBI perl-Time-HiRes libaio*

安装 RPM 包

运行以下命令安装 Percona XtraBackup 的 RPM 包:

bash

复制代码

rpm -ivh percona-xtrabackup-2.3.3-1.el6.x86_64.rpm

可能会出现以下错误:

bash

复制代码

warning: percona-xtrabackup-2.3.3-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature,key ID cd2efd2a: NOKEY
error: Faild dependencies:
lidev.so4()(64bit) is needed by percona-xtrabackup-2.3.3-1.el6.x86_64

安装 libev.so()(64bit)

访问以下地址:rpmfind.net/linux/RPM/i… ,搜索 libev.so.4()(64bit), 下载相应的文件。

然后运行以下命令安装 libev.so()(64bit):

bash

复制代码

rpm -ivh libev-4.04-2.e16.x86_64.rpm

安装 XtraBackup

最后运行以下命令完成安装:

bash

复制代码

rpm -ivh percona-xtrabackup-2.3.3-1.el6.x86_64.rpm

安装过程会显示如下信息:

bash

复制代码

Preparing...             ########################################### [100%] 
1:percona-xtrabackup     ########################################### [100%]

以下是优化后的内容:安装方法二:

使用 yum 安装

安装 Percona 源

运行以下命令安装 Percona 源:

bash

复制代码

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

使用 yum 安装 Percona XtraBackup

运行以下命令使用 yum 安装 Percona XtraBackup:

bash

复制代码

yum -y install percona-xtrabackup

Xtrabackup常用参数:

参数 描述
--user=USER 指定备份用户,如果未指定,默认使用当前系统用户
--password=PASSWD 指定备份用户密码
--port=PORT 指定数据库端口
--defaults-group=GROUP-NAME 在多实例的情况下使用
--host=HOST 指定备份的主机,可以是远程数据库服务器
--apply-log 回滚日志
--database 指定需要备份的数据库,多个数据库之间以空格分隔
--defaults-file 指定 MySQL 的配置文件
--copy-back 将备份数据复制回原始位置
--incremental 增量备份,后面跟着要增量备份的路径
--incremental-basedir=DIRECTORY 增量备份时使用,指向上一次增量备份所在的目录
--incremental-dir=DIRECTORY 增量备份还原时用来合并增量备份到全量,指定全备路径
--redo-only 对增量备份进行合并
--rsync 加快本地文件传输速度,适用于非InnoDB数据库引擎。不与--stream共用
--safe-slave-backup 安全的备份从库
--no-timestamp 生成的备份文件不以时间戳为目录

备份与恢复

全量备份

在这里我们采用的是innodb数据库引擎进行处理和操作。在这里我们使用的是innobackupex工具。



innobackupex

innobackupex 是一个备份和恢复 InnoDB 存储引擎的工具,是 Percona XtraBackup 工具包的一部分。它可以用于创建完整的物理备份,并支持增量备份和恢复操作。

下面是 innobackupex 命令的一些常用参数:

  • --user=USER:指定备份用户,如果未指定,默认使用当前系统用户。
  • --password=PASSWD:指定备份用户密码。
  • --host=HOST:指定备份的主机,可以是远程数据库服务器。
  • --port=PORT:指定数据库端口。
  • --defaults-file=FILE:指定 MySQL 配置文件。
  • --databases=DBLIST:指定要备份的数据库列表,多个数据库之间以逗号分隔。
  • --incremental:执行增量备份。
  • --incremental-basedir=DIR:指定上一次增量备份的目录路径,用于增量备份操作。
  • --apply-log:对备份进行日志应用,用于回滚操作或增量备份合并操作。
  • --copy-back:将备份数据复制回原始位置。


【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(二)https://developer.aliyun.com/article/1471058

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
81 1
|
3天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
27 0
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
124 6
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
69 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
17天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
59 2