数据库故障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语句
SELECTid,user,host,db,command,time,info
FROMinformation_schema.processlist
ORDER BYtime DESC
LIMIT 10;

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

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

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

相关文章

Python之Django开发环境搭建及项目创建

若想使用Django开发网站,需要在电脑上安装Django的开发环境。首先安装Python的开发环境,不同的操作系统有不同的安装方法,关于Python的安装就不再详细阐述了,可参考本博相关文章,除了安装Python之外,我们还…

携手天猫企业购,隆道商城商品资源再升级

近日,隆道商城与天猫企业购达成战略合作,双方在优势资源和专业服务等方面开展深度合作,天猫企业购将支持隆道商城进一步丰富商品种类、提升专业服务质量,建设跨平台品类多元化商城,打造智能化商城交易解决方案。 天猫企…

Pycharm 关闭控制台多余窗口详解(console)

文章目录 1 问题描述2 解决办法2.1 步骤1:编辑配置2.2 步骤2:使用 Python 控制台运行(取消勾选)2.3 验证:再次运行,多余窗口消失 1 问题描述 2 解决办法 2.1 步骤1:编辑配置 菜单路径&#xf…

无源晶振电路中两端电阻和电容的作用

无源晶振电路中两端电阻和电容的作用是什么,今天晶发电子就详细讲讲,具体如下: 一、并联电阻的作用 配合IC内部电路组成负反馈、移相,使放大器工作在线性区。 并联降低谐振阻抗,使无源晶振易启动。 并联电阻取值大小…

山西电力市场日前价格预测【2023-12-21】

日前价格预测 预测说明: 如上图所示,预测明日(2023-12-21)山西电力市场全天平均日前电价为295.57元/MWh。其中,最高日前电价为412.35元/MWh,预计出现在18:00。最低日前电价为0.00元/MWh,预计出…

网站地址栏提示“不安全”该如何解决

网站提示不安全的原因 缺少有效的 SSL 证书:网站管理员未及时更新或安装 SSL 证书,导致浏览器无法确认连接的安全性。证书过期:SSL 证书有一定的有效期限,如果证书过期,浏览器将认为连接不安全。证书不匹配&#xff1…

零信任数据安全深研与创新实践,美创论文入选中国科技核心期刊

近日,由美创科技第59号安全实验室覃锦端、王月兵、周杰、毛菲联合撰写的《基于动态风险评估机制的零信任IAM架构设计》一文,在中国科技核心期刊《信息安全研究》(2023年第12期)发表。 《基于动态风险评估机制的零信任IAM架构设计》…

使用 Node.js 删除文件 - 完整步骤教程

引言 在 Node.js 中处理文件尤其是移除文件,对于维护高效应用程序至关重要。储存和秩序当道的今天,删除不必要或冗余的文件能力显得尤为关键。本文深入探讨你会想要使用这个强大功能的时刻和原因,并通过各种案例展示了这个概念,同…

Kafka-生产调优

Kafka生产调优实践 通常在生产环境中,Kafka都是用来应对整个项目中最高峰的流量 搭建Kafka监控平台 生产环境通常会对Kafka搭建监控平台。而Kafka-eagle就是一个可以监控Kafka集群整体运行情况的框架,在生产环境经常会用到。官网地址:EFAK…

羊大师提示,羊奶的适宜饮用量及其益处

羊大师提示,羊奶的适宜饮用量及其益处 羊奶一直以来被视为一种健康营养的选择,它不仅仅是一种替代牛奶的选择,更是一种富含营养成分的天然饮品。但是,很多人对于羊奶的饮用量似乎并没有很准确的了解。那么,羊奶一天喝…

抢跑“自动驾驶第一股”背后:大规模商业化才是“王道”

去年以来,自动驾驶领域相关初创公司开始扎堆谋求上市。 公开资料来看,不仅有小马智行、文远知行、Momenta几家企业选择境外发行上市,还有知行科技、纵目科技、佑驾创新几家自动驾驶系统解决方案供应商更新了上市进展与计划,中国本…