数据库故障Waiting for table metadata lock

在这里插入图片描述场景:早上来发现一个程序,链接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.mfbz.cn/a/259456.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【小呆的力学笔记】弹塑性力学的初步认知二:应力分析(1)

文章目录 1.1 一点的应力状态1.2 一点主应力状态1.3 应力偏张量、球张量、应力不变量 1.1 一点的应力状态 物体在受到外力或者自身不均匀的温度场等作用时,在其内部会产生内力,物体的内力与方向和截面都有关系。假设有一个受到外力作用的变形体&#xf…

Java经典面试题:冒泡算法的使用

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java经典面试题:冒泡算法的使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题…

nodejs连接mongodb报错SyntaxError: Unexpected token .

nodejs连接mongodb报错SyntaxError: Unexpected token 如下图 经过排查,原因是npm默认安装的mongodb插件是最新版6.3.0 ,而mongodb数据库版本是4.0.0 ,两者版本不同导致nodejs报错。 解决方法是npm卸载新版本的mongodb插件,再安…

comfyUI + animateDiff video2video AI视频生成工作流介绍及实例

原文:comfyUI animateDiff video2video AI视频生成工作流介绍及实例 - 知乎 目录 收起 前言 准备工作环境 comfyUI相关及介绍 comfyUI安装 生成第一个视频 进一步生成更多视频 注意事项 保存为不同的格式 视频宽高设置 种子值设置 提示词与负向提示词…

uml用例图是什么?有哪些要素?

UML用例图是什么? UML用例图(Unified Modeling Language Use Case Diagram)是一种用于描述系统功能和用户之间交互的图形化建模工具。它是UML的一部分,主要用于识别和表示系统中的各个用例(用户需求或功能点&#…

EMNLP 2023 亮点回顾:大模型时代下的 NLP 研究

作为自然语言处理(NLP)领域的顶级盛会,EMNLP 每年都成为全球研究者的关注焦点。2023 年的会议在新加坡举行,聚集了数千名来自世界各地的专家学者,也是自疫情解禁以来,中国学者参会最多的一次。巧的是&#…

阿赵UE学习笔记——2、新建项目和项目设置

阿赵UE学习笔记目录 大家好,我是阿赵。继续来学习虚幻引擎的使用。这次介绍一下新建项目和项目设置。 一、新建项目 通过桌面快捷方式,或者EPIC Games Loader,启动虚幻引擎。 启动完成后,会打开项目管理的界面,可以看…

运算放大电路的输入偏置电流和输入失调电流

一般运放的datasheet中会列出众多的运放参数,有些易于理解,我们常关注,有些可能会被忽略了。在接下来的一些主题里,将对每一个参数进行详细的说明和分析。力求在原理和对应用的影响上把运放参数阐述清楚。由于本人的水平有限&…

软件测试中如何测试算法?

广义的算法是指解决问题的方案,小到求解数学题,大到制定商业策略,都可以叫做算法。而我们今天讨论的软件测试中的算法,对应的英文单词为 Algorithm,专指计算机处理复杂问题的程序或指令。 随着最近几年人工智能等领域…

【C语言初阶】数组

目录 一、一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 二、二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 三、数组越界 四、数组作…

每日一博 - Protobuf vs. Protostuff:性能、易用性和适用场景分析

文章目录 历史区别联系性能差异最佳实践场景分析小结 历史 对于Protostuff和Protobuf的关系,需要了解它们的起源和发展。 Protobuf(Protocol Buffers)是由Google开发的一种数据序列化格式,用于结构化数据的存储和交换。它最初是…

【✅Java中有了基本类型为什么还需要包装类?】

✅Java中有了基本类型为什么还需要包装类? ✅Java中有了基本类型为什么还需要包装类✅Java的8中基本数据类型 ✅知识拓展✅基本类型和包装类型的区别✅如何理解自动拆装箱?✅拆箱与装箱✅自动拆装箱✅自动拆装箱原理 ✅哪些地方会自动拆装箱?…

C++20形式的utf-8字符串转宽字符串,不依赖编译器编码形式

默认的char[]编码都是要看编译器编译选项的,你选了ANSI那它就是ANSI,你选了UTF8那它就是UTF8. 【注意:经典DevC只支持ANSI编码(痛苦);上图是小熊猫DevC,则有这个选项】 这一点对我的代码造成了…

【教3妹学编程-算法题】循环移位后的矩阵相似检查

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:“太阳当空照,花儿对我笑&…

Ubuntu 常用命令之 apt-get 命令用法介绍

apt-get是Ubuntu系统下的一个命令行工具,用于处理包。这个命令可以自动下载和安装软件包及其依赖项。它是Advanced Packaging Tool (APT)的一部分,APT是处理包的高级工具,可以处理复杂的包关系,如依赖关系等。 apt-get命令的常见…

linux: ip route 与 route 用法详解与对比

文章目录 1. 引言2. ip route2.1 描述2.2 语法2.3 参数2.4 例子 3. route3.1 描述3.2 语法3.3 参数3.4 例子 4. 对比5. 参考 1. 引言 本文主要介绍 ip route 以及 route 的用法和区别。 2. ip route 2.1 描述 用于管理静态路由表。linux 系统中,可以自定义从 1&…

聚类算法及可视化方法的实践与探索

簇内平方和表示数据点到其簇内质心的距离的平方和,公式如下: 其中, 是k簇数, ni是第 i 个簇的样本数, xij是第 i个簇中的第 j 个样本。 import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sk…

Python Opencv实践 - 手势音量控制

本文基于前面的手部跟踪功能做一个手势音量控制功能,代码用到了前面手部跟踪封装的HandDetector.这篇文章在这里: Python Opencv实践 - 手部跟踪-CSDN博客文章浏览阅读626次,点赞11次,收藏7次。使用mediapipe库做手部的实时跟踪&…

47 星南二楼

动态规划&#xff0c;相当于求解最长子序列问题 #include <iostream> using namespace::std; using std::cout; using std::cin; int n; int a[5100],dp[5100];int xnel(int n, int a[]) {int result 0;for(int i0; i<n; i){for(int j0; j<i; j){if(a[j]<a[…

node版本与npm版本不对应的解决方案

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 错误情况 今天遇到了个问题&#xff0c;原来用的node的版本是v14.16.0的&#xff0c;后来升级到了最新版20多的时候&#xff0c;以前的项目启动不了。 于是我手动将node卸载了&#xff0c…
最新文章