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

简介:


作者介绍

王晶中国移动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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
6月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1107 1
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
485 5
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
467 10
|
4月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
382 10
|
6月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
456 36
|
5月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
284 11
|
6月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
330 5
|
6月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
333 0
|
6月前
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
161 3

推荐镜像

更多