状态快照转移:一种MySQL Galera集群较优的备份方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:


作者介绍

王晶中国移动DBA,负责“移动云”业务系统的数据库集成架构设计、运维、优化等工作;擅长技术领域MySQL,获Oracle颁发的“MySQL DBA”官方认证,熟悉MySQL复制结构、MHA、cluster等多种架构及运维优化。

 

MySQL Galera Cluster是一套基于WSREP进行同步复制的集群解决方案,配置和使用相对简单,具有多节点同时提供读写、可用性高、强一致性和快速扩展的特点。由于它能够分担读写压力,且具有较强的数据一致性,因此在很多企业的生产环境得以应用。本文旨在说明一种适用于MySQL Galera集群的备份方案。

 

Galera集群说到底也是MySQL,因此也可以普通的数据库备份方法来备份cluster的节点数据。但普通的备份方法缺少GTID,也无法把MySQL节点恢复到预设某个时间点的状态。而且,一些备份程序运行时可能会阻断集群的正常业务操作。所以对于MySQL Galera集群,官网推荐采用状态快照转移的方式来备份。

 

从数据库本身的角度来说,通过state snapshot transfer对galera cluster的一个节点做备份和对单实例做一个完整的数据备份是非常相似的。这两种情况下,数据库节点都使用相同的机制,联合GTID和database状态来创建一个库内容的全备份。而所说的快照转移的方式备份,本质上就是用类似于快照转移的方式来触发一个脚本,这个脚本可以同时实现以上备份过程和galera仲裁者守护进程。(示例来自官网)

 

\

 

这条命令触发了donor节点,也就是备份的来源节点,去调用wsrep_sst_backup.sh脚本,通过环境变量的配置, mysqld进程可以找到这个脚本。donor节点会选取数据库没有任何变更进行的时候跑这个备份脚本,传递当前状态对应的GTID。上面的示例中‘gmcast.listen_addr=tcp://0.0.0.0:4444‘是一个仲裁监听socket地址,用来与cluster通讯的,默认是0.0.0.0:4567 。

 

当然,也可以不使用galera默认提供的这个脚本,当你不满足于这些进程提供的默认操作时(当一个节点发送或接收一个状态快照转移时,是通过跑一个独立于database server的外部进程来管理它的),galera cluster提供一个接口给用户shell 脚本来管理节点上的状态快照转移,自身也同时提供了一个普通脚本用于管理状态快照转移,你可以用它来作为创建自己脚本的基础起点。该脚本的文件名为wsrep_sst_common.sh。Linux下默认安装在/usr/bin。

 

wsrep_sst_common.sh这个SST脚本提供解析参数列表、错误记录等的现成功能。并且没有对参数顺序和数量的约束,可以根据自身情况增加或忽略某些参数。

 

它假定只有在状态转移之后,接收节点的存储引擎初始化才进行。意味着它直接拷贝源数据内容到目的数据目录。

 

当Galera cluster启动一个外部进程做状态快照转移时,会传递一些参数来配置状态转移脚本。常见的参数有以下几类:

 

1.通用参数:这些参数所有的状态转移脚本都会用到,无论发送还是接受节点。

 

  • role:区别donor或joiner

  • address:joiner的IP地址,joiner可以用wsrep_sst_receive_address这个参数来配

  • auth:权限信息,可通过wsrep_sst_auth参数来配

  • datadir:脚本所需的数据目录来源于mysql_real_data_home这个参数

  • defaults-file:my.cnf的路径

 

2.donor特有的参数:这些参数只被用于donor

 

  • gtid:节点给出的GTID来自于state UUID和sequence number或seqno

  • socket:如果需要,可以配置本地server的socket用于通信

  • bypass:节点用于甄别是否跳过实际数据的传输,只传递GTID,也就是说该节点是否应该启动增量状态传输

 

3.逻辑状态转移特有的参数:这些参数只被传递到发送和接收端的wsrep_sst_mysqldump.sh脚本中。

 

  • user:用来连接joiner和donor的数据库的用户,两边都应该一致,用wsrep_sst_auth参数来定义

  • password:用来连接joiner和donor的数据库的用户,两边都应该一致,用wsrep_sst_auth参数来定义

  • host:joiner的IP地址

  • port:joiner的端口

  • local-port:发送状态转移的端口

     

不管用默认的自带脚本,还是自己写脚本,启动的过程都是一样的。文件名必须是wsrep_sst_<name>.sh。name是wsrep_sst_methord参数的值。receiver接收并应用transfer完成之后,会输出接受节点的标准GTID,退出脚本,返回状态0,说明状态转移成功。sender在完成传输后,会发送一个done\n的信号,当脚本收到这个信号之后,会返回0值退出。

 

通过状态快照转移机制来调用buckups有以下几点好处:

 

  1. 节点可以在一个特定的时间点来启动备份,这个时间无需人工选择干预,数据库会自动选择一个没有任何影响数据库的变更执行的时间点。

  2. 这种备份方式会把GTID和备份相关联,对于可能发生的潜在数据丢失或损坏故障,便于使用GTID进行修复。

  3. 备份时节点与cluster不再保持同步,避免做备份时影响带宽性能,备份进程更不会阻断节点。

  4. 集群能够自主判断某个节点正在执行备份,就不会选这个节点再作为另一个节点的donor。

本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-09-01

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
38 4
|
6天前
|
存储 关系型数据库 MySQL
提高MySQL查询性能的方法有很多
提高MySQL查询性能的方法有很多
49 6
|
17天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
57 4
|
17天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
25 4
|
17天前
|
关系型数据库 MySQL Unix
MySQL配置不区分大小写的方法
结论 通过适当配置 lower_case_table_names参数以及在数据定义和查询中选择合适的校对规则,可以灵活地控制MySQL中的大小写敏感性,以适应不同的应用场景和需求。这样的设置既可以增加数据库的兼容性,又可以在必要时利用大小写敏感性进行精确的数据处理。需要注意的是,修改 lower_case_table_names参数后,最好在数据库初始化时进行,以避免现有表名的大小写问题。
36 3
|
25天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
130 6
|
24天前
|
存储 缓存 关系型数据库
MySQL 查询优化方法
在数据库应用中,高效的查询性能至关重要。本文探讨了常用的 MySQL 查询优化方法,包括索引优化(选择合适的索引字段、复合索引、定期维护索引)、查询语句优化(避免全表扫描、限制返回行数、避免使用不必要的函数)、表结构优化(选择合适的数据类型、分区表、定期清理无用数据)及数据库配置优化(调整缓存大小、优化存储引擎参数)。通过这些方法,可以显著提高 MySQL 的查询性能,为应用程序提供更好的用户体验。
|
2天前
|
SQL 关系型数据库 MySQL
mysql集群方案
mysql集群方案
9 0
|
3天前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2天前
|
SQL 关系型数据库 MySQL