k8s链接数据库故障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通过参数调整、进程管理、查询优化、读写分离等方式可以有效处理锁表问题。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号,是Pod连接K8s集群的凭证。 在默认情况下,系统会为创建的Pod提供一个默认的Service Account, 用户也可以自定义Service Account,与Service…

利用夜莺开源版对H3C无线设备监控

编者荐语: 真正搞监控的人肯定知道 SNMP 水有多深,有时我甚至腹黑猜测,这些厂商是故意的吧,,,指标不标准,格式各异,只能靠一款灵活的采集器了,本文是夜莺社区用户写的文章…

数据结构:图解手撕B-树

文章目录 为什么需要引入B-树?B树是什么?B树的插入分析 本篇总结的内容是B-树 为什么需要引入B-树? 回忆一下前面的搜索结构,有哈希,红黑树,二分…等很多的搜索结构,而实际上这样的结构对于数…

竞赛保研 YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快,YOLOv6还没用熟YOLOv7就来了,如果有同学的毕设项目想用上最新的技术,不妨看看学长的这篇文章,学长带大家简单的…

SpringBoot接入轻量级分布式日志框架GrayLog

1.前言 日志在我们日常开发定位错误,链路错误排查时必不可少,如果我们只有一个服务,我们可以只简单的通过打印的日志文件进行排查定位就可以,但是在分布式服务环境下,多个环境的日志统一收集、展示则成为一个问题。目…

掌握这个技巧,你也能成为学习高手!

在当今社会,思想政治学习具有重要的意义。随着社会的不断发展,个体与集体之间的关系、公共事务的处理、社会责任感等问题愈发凸显。 思政通学习小程序作为一种现代化的学习手段,为我们提供了更便捷、高效的途径,使我们更好地理解和…

实战 | API接口泄露=>未授权访问=>垂直越权=>信息泄露

文章目录 实战 | API接口泄露>未授权访问>信息泄露0x01 前言0x02 初探系统0x03 API接口泄露0x04 未授权访问系统日志接口0x05 垂直越权0x06 信息泄露 实战 | API接口泄露>未授权访问>信息泄露 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测…

TensorRT 深入介绍

前言 一、tensorRT 做了那些优化 1、算子融合 常见的算子融合有以下操作: conv bn reluconv reluconv relu max_poolconv add reluconv add 2、量化 因为我们在训练的时候,参数的每次更新的幅度都是十分微小的。所以为了保证在训练时梯度反…

rabbitmq界面主要参数分析

本篇主要分析rabbitmq broker界面参数 rabbitmq界面主要参数分析 1、connections User Name: user - 连接所使用的用户名。 State: running - 连接当前的状态,这里表明连接是活动的。 SSL/TLS: ○ - 表示这个连接没有使用SSL/TLS加密。 内部或受信任的网络中可能…

数据结构学习笔记(七)搜索结构

文章目录 1. 前言2. 概念3 静态搜索结构3.1 静态搜索表3.2 顺序搜索表3.2.1 基于有序顺序表和顺序搜索和折半搜索 4 二叉搜索树4.1 搜索二叉树的类定义4.2 搜索二叉树的搜索4.3 搜索二叉树的插入4.4 搜索二叉树的删除 5 AVL树5.1 平衡化旋转5.1.1 右旋:LL型状态5.1.…

OpenHarmony 启动流程优化

目前rk3568的开机时间有21s,统计的是关机后从按下 power 按键到显示锁屏的时间,当对openharmony的系统进行了裁剪子系统,系统app,禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其…

win10系统计算机名称查看及重命名操作方法

win10系统计算机名称查看及重命名操作方法 一、在 Windows 10 操作系统中查看计算机的名称步骤二、重命名计算机名称 一、在 Windows 10 操作系统中查看计算机的名称步骤 点击桌面左下角的“开始”按钮,点击“设置”图标(齿轮状图标)&#x…