InnoDB集群节点的恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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 文件中的持久化参数。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
弹性计算 网络协议 容灾
PostgreSQL 时间点恢复(PITR)在异步流复制主从模式下,如何避免主备切换后PITR恢复(备库、容灾节点、只读节点)走错时间线(timeline , history , partial , restore_command , recovery.conf)
标签 PostgreSQL , 恢复 , 时间点恢复 , PITR , restore_command , recovery.conf , partial , history , 任意时间点恢复 , timeline , 时间线 背景 政治正确非常重要,对于数据库来说亦如此,一个基于流复制的HA架构的集群,如果还有一堆只读节点,当HA集群发生了主备切换后,这些只读节点能否与新的主节点保持
1747 0
|
JSON 关系型数据库 MySQL
InnoDB集群节点的恢复
nnodb集群是有多个节点组成的,这些节点的数据是同步的
|
存储 运维 Kubernetes
PolarDB-X 数据节点备库重搭
本文主要介绍PolarDB-X中DN(数据节点)备库重搭的背景,以及polardbx-operator上是如何实现DN备库重搭的。
PolarDB-X 数据节点备库重搭
|
存储 NoSQL
Cassandra集群删除宕机节点
Cassandra集群删除宕机节点
Cassandra集群删除宕机节点
|
NoSQL MongoDB
副本集mogodb 物理备份与恢复
副本集mogodb 物理备份与恢复
200 0
|
SQL 关系型数据库 MySQL
只读实例(slave主从)延迟排查
本文分享的方法适用于实时查看只读延迟(主从延迟),即需要在延迟发生的时候查看才能确认问题,历史延迟不适用,以下环境已经开启并行复制。
只读实例(slave主从)延迟排查
|
缓存 监控 关系型数据库
ProxySQL+MGR组复制实现“自动故障恢复“和“读写分离“(一)
ProxySQL+MGR组复制实现“自动故障恢复“和“读写分离“(一)
314 0
|
SQL 关系型数据库 MySQL
ProxySQL+MGR组复制实现“自动故障恢复“和“读写分离“(二)
ProxySQL+MGR组复制实现“自动故障恢复“和“读写分离“(二)
201 0
|
存储 NoSQL Redis
Redis集群:主从节点添加和删除
Redis集群:主从节点添加和删除
576 0
Redis集群:主从节点添加和删除
|
存储 安全 关系型数据库
干货 | Elasitcsearch7.X集群、索引备份与恢复实战
1、问题引出 ES中文社区中,有如下问题: 问题1:存储数据,data目录从一个机器直接移到一台新的机器是否可以直接使用? 问题2:es升级时,data目录如果在外部路径,从低版本升级到高版本时,data目录是否直接可以使用? 问题3:将一个旧的es数据(400多G)迁移到新的es中的时候直接将旧es的data目录下indices文件拷贝到新es的data下(大概花了一个晚上),这种做法是否可取?
548 0
干货 | Elasitcsearch7.X集群、索引备份与恢复实战