网页访问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的连接池,上午登陆正常,但是当过多的增删改操作占用连接池连接不释放的情况下,下午连接池被占满,应用连接数据库失败,网页无法登陆。
实际上午网页可登陆但是也无法修改数据库数据,修改操作都会堆积,等待锁释放。当连接池被占满后,连接数据库失败,无法登陆页面。使用客户端可以连接数据库。
解决方法:
重启数据库!停止从库的重建工作。