摘要:本文来自华为Cloud的研发团队。它主要分享了MySQL备份工具Xtrackup的备份过程,华为云数据库团队的优化和改进以及可能遇到的问题和解决方案。
本文来自华为云的研发团队,主要共享MySQL备份工具Xtrabackup的备份过程,华为云数据库团队的优化和改进以及使用中可能遇到的问题和解决方案。在文章中,讨论的主要是MySQL的华为云RD,以及用户的MySQL数据库的自我制造的社区版本。我希望帮助每个人理解和使用Xtrabackup。将来,Xtrabackup问题将更加平静。
Xtrabackup是Percona团队为MySQL数据库物理热备份开发的开源备份工具。它具有快速备份速度的特征,支持备份数据压缩,自动学校备份数据,支持流量输出以及在备份过程中几乎没有影响业务。在场时,MySQL备份工具通常由各种云制造商使用。
当前的Xtrackup有两个版本:Xtrabackup 2.4.x和8.0.x,用于备份mySQL 5.X和MySQL 8.0.x版本。我们介绍了Xtrabackup备份MySQL社区版本以及Xtrabackup On Xtrabackup On On On Xtrabackup backup如何华为云
Xtrabackup是为Percona MySQL设计的,还支持MySQL的官方社区版本。该过程如下图所示:
图1:Xtrabackup备份官方MySQL进程信号
应该注意的是,第七和第8步中Xtrabackup 2.4.x和8.0.x之间存在差异。这种差异是MySQL 8.0.x.的原因有关详细信息,我们将在下面介绍。
在MySQL实例的备份社区版本中,Xtrabackup将对数据库的数据库业务产生很大的影响,这甚至会导致数据库“挂起”。因此,Huawei Cloud MySQL团队已经优化了这一过程,主要是两个过程要点:
优化后,华为云Xtrackup的MySQL备份过程如下:
图2 Xtrackup备份华为云mysql过程指示
与FTWRL锁相比,用于备份的备份锁定表对客户实例的影响很小,其锁定过程很简单。不允许使用。
备份所有表文件后,Xtrabackup需要获取Binlog GTID信息。
由于Xtrabackup 2.4.x和8.0.x在处理Binlog时具有差异,并且恢复过程存在差异,因此我们将在随后的文章中详细解释。
华为云已使用Xtrackup为公司的几乎所有MySQL实例提供备份服务。在使用过程中,我们积极与社区保持联系,并报告Percona社区中的一些问题,以帮助Xtrabackup朝着更好的方向发展。此外,对于发现的一些致命问题,如果社区未能及时修复它,华为云数据库团队将及时维修,以确保备份数据的正确性。
以下是我们在使用Xtrabackup备份过程的所有阶段可能遇到的问题,分析原因和相应的解决方案,
原因:Xtrackup在兼容性检查期间无法获得MDL锁。Xtrabackup兼容性检查是通过查询Image_Schema.Tables实现的。
','mysql')””
查询每个表格时,您需要获取相应表的MDL锁定。如果此时的MySQL实例中有长时间的DML或DDL语句,或更严重的情况,则会出现MDL锁。这次,Xtrackup将“挂起”很长时间。
解决方案:如果等待锁的原因仅由于其他SQL语句的阻塞,请等待其他SQL执行完成;如果发生死锁,此时需要分析僵局的原因。MDL锁定视图功能可以帮助用户分析业务的MDL僵局。
”);”
原因:在备份过程中,如果主机业务负载很高,则重做日志写入快速,并且Xtrabackup的重做日志备份线程的备份速度将来自重做日志的写作速度,因为MySQL REDO LOG撰写文件。循环方法的使用使新编写的日志封面是以前尚未备份的日志,因此备份失败。
解决方案:建议在低峰值业务期间备份,或增加重做日志的文件大小。
“已经对优化的(没有重做记录)的ddlopration进行了划分。所有修改页面都可能还没有刷到磁盘上。
PXB将无法进行一致的备份。重试背部操作“”
原因:DDL操作在备份过程中创建了索引。由于创建索引不会编写重做,因此,如果持续备份会导致数据不一致的问题,则Xtrabackup在此场景中失败。
解决方案:请勿在备份过程中创建索引。如果确实需要它,建议将索引直接带入施工语句中,或使用锁定DDL参数进行备份(实例上的新DDL操作)。
“已经执行了撤消DDL截断(可以是自动的)操作。”
原因:在Xtrackup备份期间,如果MySQL实例发生在撤消截断下,则可能会发生新的撤消文件的撤消日志丢失(不同的空间ID)。官方修复了Xtrabackup 8.0.14版本上的问题(基于MySQL 8.0。21)。维修方法是重做备份线程。当发现重做日志是操作的截断操作时,它将失败。不幸的是,维修并未完全解决问题。在以下两种情况下,Xtrabackup的社区版本可能仍然存在恢复数据的不一致现象:
解决方案:在备份期间关闭撤消表空间的截断操作,并禁止用户创建撤消表空间,以有效防止备份数据恢复不一致的问题。另外,发生了现象。
原因:操作系统允许同时打开的文件数是有限的。Xtrabackup将在加载符号阶段的同一时间打开所有表文件。如果Xtrackup打开的表格数量超过此限制,则备份将失败。
解决方案:映射操作系统,允许同时配置最大文件数量,或使用锁定DDL参数(阻止实例上的新DDL操作)。
“尝试将表空间'xxxx'与id xxx添加到表空间内存缓存中,但是table specace xxxx almedy存在于缓存中!”
原因:在Xtrackup中打开表空间的整个过程中没有锁定。如果重命名表具有重复加载相同表空间的概率,则此时Xtrabackup将检测重复的表空间ID,因此备份失败。
解决方案:一般来说,加载表空间是一个快速的操作。重命名表不是非常频繁的操作。这种情况就足够了(percona xtrackup 2.4.x.xtrackup支持多线加载表空间)。
“ Xtrabackup:在XXXX上检测到的数据库页面损坏,返回。”
原因:Xtrackup将在备份InnoDB表数据文件时检查每个页面的校验和。如果您发现校验和错误是错误的,则备份失败。目前,MySQL实例的数据已损坏(例如,磁盘是无声的)。
解决方案:恢复先前的备份数据或其他方法后,必须在备份成功之前修复数据。在随后的文章中,我们还将详细介绍数据修复方法。
本文主要比较Xtrabackup备份的原理,Xtrabackup备份,MySQL和Huawei Cloud的备份社区版本对其进行了改进,并分享了Xtrabackup常见问题的调查和解决方案。将来希望帮助每个人理解和使用Xtrackup。我们还将继续为客户提供更好的数据库服务,并始终保护客户的数据安全。
作者:GaussDB数据库。