资讯专栏INFORMATION COLUMN

Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

IT那活儿 / 2032人阅读
Mysql数据库锁情况下开启备份导致数据库无法访问处理分享
[
背景简介
]

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。mysql虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。故障基本都能通过社区和官方文档获取解决方案,在应用范围上也是很广的,互联网公司基本都有使用mysql。本章主要针对mysql5.7.25的锁表故障进行分析处理。

[
分析过程
]

1、首先接到业务反馈数据库完全无法写入数据了,后查看数据库监控发现指标正常;


2、登陆数据库主机核实主机资源正常:


3、通过showprocesslist查看当前连接,发现300左右的连接基本全是waitingfor global read lock和少部分waitingfor stored function metadata lock以及FLUSHTABLES WITH READ LOCK,如下所示


4、通过showOPEN TABLES where In_use > 0查看当前被锁表xx_test,


5、通过查看当前事务发现只有两个事务;


6、通过查看当前正在锁事务和等待锁事务,发现并没有记录有正在锁事务和等待锁事务


7、通过查看当前事务确认到目前只有两个事务在运行,其它都是都在等待,且无等待锁表及正在锁表。


8、发现备份账号FLUSHTABLES WITH READ LOCK关闭所有打开的表并使用全局读锁锁定所有数据库的所有表,所以业务查询没有问题。


9、猜想应该是因为xx_test的锁表阻塞了FLUSHTABLES WITH READ LOCK执行,导致整个数据库完全无法修改。


[
验证过程
]
  1. 首先通过processlist输出看到锁表xx_test连接有3个等待该表的锁,其它并没有该表请求连接,先将这三个等待的select连接kill。

  2. 然后将当前正在执行的两个事务kill。

  3. 观察数据库发现FLUSH TABLES WITH READ LOCK结束,其它等待事务都开始执行,数据库恢复正常。

[
总结
]

数据库触发FLUSHTABLES WITH READLOCK应该是有业务方在备份,单纯的表被锁了一般情况下也只会影响锁表的写,但是在锁表情况的备份触发FLUSHTABLES WITH READ LOCK,就可能导致整个库变成只读,建议备份工作都放在晚上闲时。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130124.html

相关文章

  • SegmentFault 技术周刊 Vol.42 - MySQL:从删库到跑路

    摘要:肖鹏微博数据库那些事儿肖鹏,微博研发中心技术经理,主要负责微博数据库相关的业务保障性能优化架构设计,以及周边的自动化系统建设。经历了微博数据库各个阶段的架构改造,包括服务保障及体系建设微博多机房部署微博平台化改造等项目。 showImg(https://segmentfault.com/img/bV24Gs?w=900&h=385); 对于手握数据库的开发人员来说,没有误删过库的人生是...

    aboutU 评论0 收藏0
  • 据库MySQL机制、热备、分表

    摘要:双机热备和备份的区别热备份指的是即高可用,而备份指的是即数据备份的一种,这是两种不同的概念,应对的产品也是两种功能上完全不同的产品。双机热备分类按工作中的切换方式分为主备方式方式和双主机方式方式。 欢迎关注公众号:【爱编码】如果有需要后台回复2019赠送1T的学习资料哦!! showImg(https://segmentfault.com/img/remote/146000001900...

    Meils 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<