包拯断案 | 集群备份为什么多次失败@还故障一个真相

2024-03-29 13:28

本文主要是介绍包拯断案 | 集群备份为什么多次失败@还故障一个真相,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提问:作为DBA运维的你是否遇到过这些烦恼

1)数据库集群在夜间全量备份时,会出现多次报错?

2)而且一般在备份的准备阶段就退出了,根本没法完成数据备份工作?

心中有章,遇事不慌

作为DBA的你,遇到问题无从下手,除了在问题面前徘徊,还能如何选择?如果你一次或多次遇到该问题还是无法解决,又很懊恼,该如何排忧呢?关注公众号,关注《包拯断案》专栏,让小编为你排忧解难~

#包拯秘籍#

秘籍不能少,一整套故障排错及应对策略送给你,让你像包拯一样断案如神:

#首先

遇到此类问题后,我们要做到心中有章(章程),遇事不慌。一定要冷静,仔细了解故障现象(与研发/用户仔细沟通其反馈的问题,了解故障现象、操作流程、数据库架构等信息)

#其次

我们要根据故障现象进行初步分析。心中要想:是什么情况导致夜间数据库集群全量备份多次报错?例如:是配置参数还是功能组件的问题?

#然后

针对上述思考,我们需要逐步验证并排除,确定问题排查方向。

#接着

确定了问题方向,进行具体分析。通过现象得出部分结论,通过部分结论继续排查并论证。

#最后

针对问题有了具体分析后,再进行线下复现,最终梳理故障报告。

真刀实战,我们能赢

说了这么多理论,想必实战更让你心动。那我们就拿一个真实项目案例进行分析---某国有大型银行项目现场,运维人员在夜间进行数据库集群全量备份时,多次遭遇备份报错,该如何快速分析处理:

1、故障发生场景

夜间在项目现场兢兢业业进行项目运维的你,正在为某个数据库集群进行全量数据备份,却在备份的准备阶段,系统就退出了,根本没法完成备份工作。经过多次备份尝试仍然行不通,对现场情况和原因不太清楚。

2、故障排查

通过管控报错定位到备份任务日志,看到备份失败的原因均是因为undo log 清理导致undo log 的space_id变化,从而导致xtrabackup备份失败。

查看备份节点数据目录,发现在其目录下均存在undo_1_trunc.log文件。两个集群从库情况基本一致,也都存在undo_1_trunc.log文件。

undo_1_trunc.log文件是undo表空间truncate 时创建、用于记录truncate操作的临时日志文件,truncate操作完成后自动删除,但undo_1_trunc.log文件一直存在,说明truncate操作一直在进行中,且文件日期比较早,说明truncate操作夯住的时间比较长。

查阅官方bug信息https://bugs.mysql.com/bug.php?id=104573 ,发现有类似的从库undo表空间长时间处于清理状态,该问题是由参数 super_read_only =ON 触发的。

3、故障处理

为了减少触发bug引起的备份失败,需要调整两个参数:innodb_max_undo_log_sizeinnodb_purge_rseg_truncate_frequency。

innodb_max_undo_log_size

01这个参数主要用于定义undo表空间的阈值大小。如果undo表空间超过此阈值,则在innodb_undo_log_truncate=ON时,将其标记为truncation。标记为truncation的undo表空间将被置为inactive,不会被新的事务所使用,现有事务允许完成。purge线程清空、释放那些不再需要的回滚段,当undo表空间的所有回滚段释放后,undo表空间会执行一个truncate 操作,undo表空间截断为初始化大小值(16MB)。truncate完成后,undo表空间重新激活,可以分配新的事物。

采取措施:将innodb_max_undo_log_size由2147483648(2G)调整为4294967296(4G),减少标记为truncation的可能性。

innodb_purge_rseg_truncate_frequency

02这个参数是根据调用purge的次数,定义释放回退段的频率。在回滚段被释放之前,undo表空间不能被truncate。通常情况下,清除系统每调用(默认)128次purge,就释放一次回滚段。加大该值会减低purge线程释放回滚段的频率。

采取措施:将innodb_purge_rseg_truncate_frequency由16调整为128(默认值),降低释放回滚段的频率,从而降低truncate的频率。

本期复盘总结

1、在InnoDB 存储引擎中,undo 在完成事务回滚和 MVCC 之后,就可以 purge 掉了,purge后文件大小虽然不会变,但可以被重新分配使用。

2、在 innodb_max_undo_log_size 设置较大情况下,在undo log 大小达到阈值前被 purge 掉,这样空间就能重用,很难达到阈值,就不会触发 undo log truncate,也就不会触发数据备份失败这个 bug了 。

这篇关于包拯断案 | 集群备份为什么多次失败@还故障一个真相的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/858712

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Nacos客户端本地缓存和故障转移方式

《Nacos客户端本地缓存和故障转移方式》Nacos客户端在从Server获得服务时,若出现故障,会通过ServiceInfoHolder和FailoverReactor进行故障转移,ServiceI... 目录1. ServiceInfoHolder本地缓存目录2. FailoverReactorinit

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节