InnoDB集群节点的恢复

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: Innodb集群是有多个节点组成的,这些节点的数据是同步的。对于Innodb集群的备份,通常只需要在一个节点上进行备份。当需要恢复时,可以把备份集恢复到集群中的任意一个节点上。下面通过实验说明在同一节点和不同节点上进行恢复的方法。

Innodb集群是有多个节点组成的,这些节点的数据是同步的。对于Innodb集群的备份,通常只需要在一个节点上进行备份。当需要恢复时,可以把备份集恢复到集群中的任意一个节点上。下面通过实验说明在同一节点和不同节点上进行恢复的方法。


实验环境

实验的集群是有3个沙箱实例组成的一个InnoDB集群,集群的成员信息如下:


mysql> select MEMBER_ID,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE  FROM performance_schema.replication_group_members;
+--------------------------------------+-------------+-------------+--------------+-------------+
| MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE |
+--------------------------------------+-------------+-------------+--------------+-------------+
| 79db1af9-8c9e-11ec-b19d-fa163ea83c5b | 127.0.0.1   |        3310 | ONLINE       | SECONDARY   |
| 97421a78-8c9e-11ec-b6e3-fa163ea83c5b | 127.0.0.1   |        3320 | ONLINE       | SECONDARY   |
| a292a14a-8c9e-11ec-ba94-fa163ea83c5b | 127.0.0.1   |        3330 | ONLINE       | PRIMARY     |
+--------------------------------------+-------------+-------------+--------------+-------------+
3 rows in set (0.00 sec)


备份软件使用国产的鼎甲迪备8.0。


同一个节点的恢复

在同一个节点上进行备份和恢复比较简单,例如备份在端口为3310的沙箱实例上进行,恢复也在同一个节点。在恢复过程中可以使用下面的命令启动和停止节点:


/usr/bin/mysqlsh -- dba startSandboxInstance 3310 
/usr/bin/mysqlsh -- dba stopSandboxInstance 3310 --password='yaoyuan'



在选择恢复类型时注意不要选择“恢复到指定时间点”,而要选择“恢复到备份状态(最短恢复时间)”,如下图:


image.png


也就是只恢复备份集,不前滚二进制日志。这样恢复完成后,端口为3310的沙箱实例的数据落后与另外两个示例,但MySQL组复制的分布恢复特性(Distributed Recovery https://dev.mysql.com/doc/refman/8.0/en/group-replication-distributed-recovery.html ),会对落后的节点自动进行恢复,从而实现集群中所有节点的数据一致。在分布恢复完全之前,检查集群中节点的状态如下:


mysql> select MEMBER_ID,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE FROM performance_schema.replication_group_members;
+--------------------------------------+-------------+-------------+--------------+
| MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+--------------------------------------+-------------+-------------+--------------+
| 79db1af9-8c9e-11ec-b19d-fa163ea83c5b | 127.0.0.1   |        3310 | RECOVERING   |
| 97421a78-8c9e-11ec-b6e3-fa163ea83c5b | 127.0.0.1   |        3320 | ONLINE       |
| a292a14a-8c9e-11ec-ba94-fa163ea83c5b | 127.0.0.1   |        3330 | ONLINE       |
+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)



可以看到刚刚恢复的节点的状态是RECOVERING,待分布恢复完成后会变成ONLINE。


由于InnoDB组复制的自动容错特性,对单个节点进行恢复的过程中不需要关闭集群,这样恢复完成后也不需要执行 START GROUP_REPLICATION。


不同节点的恢复

MySQL数据库的恢复是恢复数据目录(datadir),由于InnoDB集群的各个节点之间的数据是自动同步的,因此不同节点之间的数据目录中的内容绝大部分是一致,但需要注意数据目录下的两个文件在不同节点是不同的:一个是auto.cnf文件,另一个是mysqld-auto.cnf。

auto.cnf文件

auto.cnf文件中保存着实例的UUID,不同实例的UUID是不同的,例如端口为3310的沙箱实例的UUID如下:


# cat /root/mysql-sandboxes/3310/sandboxdata/auto.cnf 
[auto]
server-uuid=79db1af9-8c9e-11ec-b19d-fa163ea83c5b


端口为3320的沙箱实例的UUID如下:


# cat /root/mysql-sandboxes/3320/sandboxdata/auto.cnf 
[auto]
server-uuid=97421a78-8c9e-11ec-b6e3-fa163ea83c5b

如果要把3310的备份集恢复到3320,注意要先备份3320的auto.cnf文件。在恢复完成后,启动实例之前恢复3320的auto.cnf文件。如果没有将3320节点中的auto.cnf文件中保存的UUID,再启动时错误日志中会记录到下面的错误提示:


2022-02-15T03:01:35.269051Z 0 [ERROR] [MY-011516] [Repl] Plugin group_replication reported: 'There is already a member with server_uuid 79db1af9-8c9e-11ec-b19d-fa163ea83c5b. The member will now exit the group.'
2022-02-15T03:01:38.426638Z 0 [System] [MY-011504] [Repl] Plugin group_replication reported: 'Group membership changed: This member has left the group.'



如果没有备份auto.cnf文件,也可以手工修改auto.cnf文件,3320的UUID在其他节点中也可以查到:


mysql> select instance_id,mysql_server_uuid from mysql_innodb_cluster_metadata.instances where instance_id=2;
+-------------+--------------------------------------+
| instance_id | mysql_server_uuid                    |
+-------------+--------------------------------------+
|           2 | 97421a78-8c9e-11ec-b6e3-fa163ea83c5b |
+-------------+--------------------------------------+
1 row in set (0.00 sec)


mysqld-auto.cnf 文件

mysqld-auto.cnf 文件中以JSON格式保存着持久化参数,不同节点的持久化参数是不同的。这个文件可以先手工备份,在恢复完数据目录后,再恢复这个文件的备份。也可以手工修改这个文件,根据不同的节点进行响应的调整。


总结

单实例的恢复通常有两步,第一步是恢复备份集,第二步是使用二进制日志前滚到指定的时间点。而InnoDB的集群中节点恢复实际上比单实例的恢复要简单,因为不需要执行第二步,恢复的节点的数据同步可以使用其他节点的二进制日志自动完成,这是InnoDB组复制的分布恢复特性(Distributed Recovery)。


由于集群里的节点的数据是自动同步的,只需要在一个节点上进行备份即可。恢复到不同节点时,注意在加入集群前修改auto.cnf文件的对应节点的UUID和mysqld-auto.cnf 文件中的持久化参数。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
监控 安全 Shell
Zabbix Server trapper 命令注入漏洞 (CVE-2017-2824)
Zabbix Server trapper 命令注入漏洞,攻击者可通过特定Payload获取服务器执行权限。
559 1
|
SQL 缓存 分布式计算
SparkSQL与Hive metastore Parquet转换
Spark SQL为了更好的性能,在读写Hive metastore parquet格式的表时,会默认使用自己的Parquet SerDe,而不是采用Hive的SerDe进行序列化和反序列化
SparkSQL与Hive metastore Parquet转换
|
2月前
|
存储 人工智能 分布式计算
中国AI云市场阿里云占比35.8%位列第一
国际权威市场调研机构英富曼(Omdia)发布《中国AI云市场,1H25》报告——2025年上半年,中国AI云市场规模达223亿元,阿里云占比35.8%位列第一,市场份额高于2到4名的总和,凭“AI全栈”继续引领市场发展。
|
11月前
|
供应链 NoSQL Java
用Redisson写一个库存扣减的方法
通过本文的介绍,我们详细讲解了如何使用Redisson实现一个简单的库存扣减功能。通过使用分布式锁,可以确保库存扣减操作的原子性和高效性。希望本文能帮助您更好地理解和应用Redisson,构建高效、可靠的库存管理系统。
402 15
|
网络协议
计算机网络的分类
【10月更文挑战第11天】 计算机网络可按覆盖范围(局域网、城域网、广域网)、传输技术(有线、无线)、拓扑结构(星型、总线型、环型、网状型)、使用者(公用、专用)、交换方式(电路交换、分组交换)和服务类型(面向连接、无连接)等多种方式进行分类,每种分类方式揭示了网络的不同特性和应用场景。
|
机器学习/深度学习 人工智能 自然语言处理
真香!人人都该学的大模型课程
通过这个课程,可以快速的了解从机器学习、深度学习、自然语言处理、大模型,整个发展链路顺了不少。 还可以给自己安排个小蜜,工作中经常回答的问题,都可以通过RAG方案来搞定,以后就上班摸鱼,AI 打工了。
281 11
|
存储 搜索推荐 测试技术
《C 语言函数指针:解锁灵活编程的强大工具》
《C 语言函数指针:解锁灵活编程的强大工具》介绍了函数指针在 C 语言中的应用,通过实例解析其在程序设计中的灵活性和强大功能,帮助读者掌握高效编程技巧。
|
Linux Go
[golang]使用gocron编写定时任务
[golang]使用gocron编写定时任务
583 0
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用合集之将多个表的数据导入到一个 source table中如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
Windows
Win11怎么重置系统?(小白专享篇)
Win11怎么重置系统?(小白专享篇)
1679 3