数据库故障Waiting for table metadata lock

news2024/12/24 11:41:23

在这里插入图片描述场景:早上来发现一个程序,链接mysql数据库有点问题,随后排查,因为容器在k8s里面。所以尝试重启了pod没有效果

一、重启pod:
这里是几种在Kubernetes中重启Pod的方法:

  1. 删除Pod,利用Deployment重建
kubectl delete pod mypod

Deployment控制器会重建新的Pod

  1. 使用kubectl edit直接编辑Pod定义,设置spec.restartPolicy为Always

  2. 利用RollingUpdate触发Pod重启:

kubectl rollout restart deployment mydeploy
  1. 利用kubectl exec远程执行重启命令:
kubectl exec mypod -- /bin/sh -c "reboot"
  1. 设置PodTemplate的LastAppliedConfigAnnotation触发重启

以上都是些常用的在K8s中重启Pod的方式。

根据需要选择合适的方法。删除重建和RollingUpdate比较流畅,适合批量重启。exec命令适用于个别Debug场景的重启。

二、强制停止服务
有几种方法可以完全停掉Kubernetes集群中的Pod:

  1. 缩容Deployment:
kubectl scale deployment my-deploy --replicas=0 

这会将Pod的副本数设置为0,停止所有Pod。

  1. 移除Pod selector标签:

编辑Deployment,移除pod模板中的标签,如app=myapp。这会使现有Pod与部署不匹配而被删除。

  1. 编辑Deployment的.spec.paused=true

这会暂停Deployment的操作,停止重新创建Pod。

  1. 删除Namespace:
kubectl delete namespace my-ns

删除命名空间也会删除其中的所有Pod。

所以通过组合使用上述方法,可以完全删除或停止Namespace和Deployment中的Pod。

注意完全停Pod可能会影响服务,要根据实际情况平滑处理。

三、检查mysql
通过show processlist;
发现有大量的Waiting for table metadata lock

命令查询及批量删除:
要批量kill掉那些因等待表元数据锁(Waiting for table metadata lock)而被阻塞的连接,可以使用如下方法:

  1. 查找那些被阻塞的连接:
SELECT * FROM information_schema.processlist 
WHERE state = 'Waiting for table metadata lock'
AND time > 60; 

这会返回所有被阻塞超过60秒的连接。

  1. 然后批量kill掉这些连接:
SELECT concat('KILL ', id, ';') FROM information_schema.processlist
WHERE state = 'Waiting for table metadata lock' 
AND time > 60;

这会生成一系列的KILL语句。

  1. 复制这些KILL语句并执行,就能有效终止那些被长时间阻塞的连接,释放表锁。

注意提前检查需要KILL的连接,避免影响正处理重要任务的连接。

tips:
1.要用对特权账户,有些业务账户无法kill特权账户执行的sql。
2.要有倒序,查看卡在第一个的sql,然后执行kill
在这里插入图片描述
3.应用停止之后,数据库没有新增的输入输出了,然后kill到lock表的ID就可以恢复了

其他解决方法:
MySQL中处理锁表的常用方法有:

  1. 通过show processlist;命令查看是否有锁表现象发生,分析找出发生锁表的session进程。

  2. 通过show engine innodb status\G;命令查看事务是否存在锁等待。

  3. 通过增加索引优化查询改善锁表情况。

  4. 终止或者重启发生锁表的session进程。可以用kill命令终止进程的方式。

  5. 调整隔离级别参数lower_isolation_level,将数据库隔离级别调低,使一些读操作可以忽略锁,从而减少锁表概率。

  6. 调整innodb_lock_wait_timeout参数,让锁等待超过指定秒数后返回错误而不是无限等待锁。

  7. 对于主从数据库,可以kill主库sessionId后使请求被转移到从库上,避开主库上的锁。

综上,MySQL通过参数调整、进程管理、查询优化、读写分离等方式可以有效处理锁表问题。

查看执行过长的sql:

-- 统计前10个执行时间最长的SQL语句
SELECT
    id,
    user,
    host,
    db,
    command,
    time,
    info
FROM
    information_schema.processlist
ORDER BY
    time DESC
LIMIT 10;

notepad:
sqlyog不会主动切断命令,需要到终端命令kill 进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP地址定位如何助力反欺诈?

随着互联网的快速发展,网络欺诈行为也日益猖獗,给广大用户和企业带来了巨大的经济损失。为了应对这一挑战,IP地址定位技术逐渐成为反欺诈领域的重要手段。本文将介绍IP地址定位如何助力反欺诈,并探讨其技术与实践的结合。 一、IP地…

重磅荣誉 | 竹云荣登《2023胡润全球猎豹企业榜》

12月19日,“2023胡润全球猎豹企业大会”暨《2023胡润全球猎豹企业榜》发布活动在广州成功举办。大会邀请上百位嘉宾,其中包含猎豹企业创始人/CEO、猎豹企业投资机构代表、政府领导及知名专家学者等一同交流分享,聚焦猎豹企业和创业企业相关产…

[toolschain] 头文件有下划线报错不好看,ubuntu下vscode如何设置包含目录路径,以及如何找到安装包的头文件

写在前面 本文是把之前的散落在不同blog中的记录,总结单独合成了一篇文章 vscode 如何配置文件路径 之前使用visual studio 感觉在这一点上 更方便,如果vscode 要配置一下 。 新建:c_cpp_properties.json 或者 ctrl shift p在设置中查找 c…

java Filter内存马分析

知识基础: 刚开始内存马的这块学习与反序列化并无太大关系,反而与javaweb,tomcat联系更加紧密。所以在学习内存马之前需要先了解JSP,java web的三大件,Servlet,Filter,Listener的基本知识和工作…

数据可视化(附带操作实例)

一、主要目的: 数据可视化是关于图形或表格的数据展示,旨在借助图形化手段,清晰有效的传达与沟通信息。通过直观地传达关键内容与特征,从而实现对相当稀疏而又复杂的数据集的深入洞察。熟悉在Python开发环境中支持数据可视化环节…

【23真题】碰到这种超纲题,放宽心态。

哈喽大家好,现在这个时间节点,有很多同学开始刷真题了!所以23真题系列正式启动!小马哥将全面发布23真题及详细解析! 另外之前分享过的“公式宝典”,还是希望大家可以自己提前打印出来,纸质才能…

爬虫入门--爬取电影TOP250-附源码解析

爬取电影TOP250 1 知识小课堂1.1 什么是爬虫1.2 爬虫能做什么 2 代码解析2.1 运行环境2.2 过程解析2.2.1 第一步:引入两个模块2.2.2 找到网址2.2.3 拉去页面全内容 2.2.42.3 完整代码 1 知识小课堂 1.1 什么是爬虫 爬虫,也叫网络蜘蛛,如果把…

教你windows10如何原生支持预览IPhone拍摄的HEIC格式照片

HEIC是新出的一种图像格式,苹果的iOS 11更新后,iPhone 7及其后硬件,在拍摄照片时默认存储为HEIC格式。与JPG相比,它占用的空间更小,画质更加无损。HEIC格式照片支持iOS11及macOS High Sierra(10.13&#xf…

Linux运维工程师面试题汇总

一、linux 1.linux系统启动流程 第一步:开机自检,加载BIOS第二步:读取MBR第三步:Boot Loader grub引导菜单第四步:加载kernel内核第五步:init进程依据inittab文件夹来…

好家伙,这个开源项目硬生生复制了一个 ChatGPT Plus 出来

最近有一款聊天机器人框架 Lobe Chat 火出了天际,它不仅支持多模态,支持语音会话,还有一个强大的 Function Calling 插件生态系统(可以作为 ChatGPT 插件的平替)。最重要的是,它的 UI 很漂亮,一…

电压放大器性能有什么特点

电压放大器是一种常见的电子设备,用于将输入信号的电压放大到所需的输出电压。它在各种领域中被广泛应用,如音频放大器、通信系统和控制系统等。 电压放大器的性能特点对于实际应用非常重要。下面将详细介绍电压放大器的几个关键性能特点。 增益&#xf…

Mac m系列芯片配置多版本的Java环境

本地已安装 JDK8,现在需要配置一下 JDK21,以支持未来的工作,同时实现动态切换 JDK 版本,顺便在此记录过程 ~ 话不多说 直接上货 下载 JAVA 21 Java Downloads | Oracle 中国 傻瓜式安装 成功后使用 “command 空格” 组合键&am…

VUE实现购物商城网站前端源码

文章目录 1.设计来源1.1 登录注册页面1.2 主界面1.3 列表界面1.4 详细界面1.5 购物车界面 2.源码2.1源码目录结构2.2源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/135054910 VUE实现购物商城网站前端源码&…

第80讲:GTID全局事务标识符的基本概念以及在Binlog中应用GTID

文章目录 1.GTID的基本概念1.1.为什么要引入GTID1.2.什么是GTID 2.开启GTID全局事务标识符的功能3.模拟产生Binlog日志观察开启GTID功能的区别3.1.模拟产生Binlog日志3.2.观察Binlog日志中的事件信息3.2.观察节点状态有什么变化3.3.观察Binlog日志会有什么变化 4.使用GTID来截取…

Compose——下拉刷新、上拉加载更多

效果图: 主要的代码为: package com.yaona.compose_list_shangla.swipeimport androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundat…

Linux 操作系统(Vim)

vim 编译器(相当于windows中记事本) 当在终端窗口直接运行vim命令,会出现以下截图(类似手册对vim编译器简单的介绍): vim提供三种基本工作模式: 命令模式(默认模式) 插入模式 末行模式 创建文本…

字节跳动的辉煌与波澜:兴衰成败的深度剖析

导言 字节跳动作为一家全球知名的科技公司,其在短视频领域的崛起备受瞩目。然而,随着时间的推移,公司也面临了一系列挑战。本文将深入研究字节跳动的兴衰成败,以及公司在发展过程中所面临的困境和成功之道。 1. 创业初期与初见成绩…

2023 英特尔On技术创新大会直播 |我感受到的AI魅力

文章目录 前言英特尔技术创新大会 的来历芯生无限 赋能AI创新后记 前言 近年来,人工智能(Artificial Intelligence)的应用与发展呈现出爆发式增长的态势,成为科技领域最为引人注目的热门话题之一。作为全球领先的半导体公司&…

SpringIOC之AnnotatedElementKey

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

C语言——高精度乘法

一、引子 高精度乘法相较于高精度加法和减法有更多的不同,加法和减法是一位对应一位进行操作的,而乘法是一个数的每一位对另一个数的每一位进行操作,需要的计算步骤更多。 二、核心算法 void Calculate(int num1[], int num2[], int numres…