网页访问504报错--waiting for global read lock

问题现象:

web网站登录时报错504,timeout.

nginx正常,api报错连接数据库失败。

排查过程:

1.手动登录数据库连接正常,查询数据正常;(未测试数据写入)

2.使用命令:show processlist发现update和set等命令语句都是waiting for global read lock状态。

3.数据库从库在上午10:00时候执行了重建,上午数据库正常无报错,下午开始数据库无法连接。

4.最终确定是由于数据库从库重建时使用了锁定全表操作,导致此故障。

问题根因:
在进行数据库从库重建的过程中,使用了锁定全表的语句,导致主库只读,无法写入数据。由于应用使用的是springboot的连接池,上午登陆正常,但是当过多的增删改操作占用连接池连接不释放的情况下,下午连接池被占满,应用连接数据库失败,网页无法登陆。

实际上午网页可登陆但是也无法修改数据库数据,修改操作都会堆积,等待锁释放。当连接池被占满后,连接数据库失败,无法登陆页面。使用客户端可以连接数据库。

解决方法:

重启数据库!停止从库的重建工作。

posted @ 2020-11-19 15:34  安静的领结  阅读(1103)  评论(0编辑  收藏  举报