记一次MySQL 1135错误及解决

网友投稿 1457 2022-11-09

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

记一次MySQL 1135错误及解决

公司同事的朋友MySQL库有问题,想让帮忙看看。

1.报错信息:mysql cannot create thread、 mysql无法创建新的线程。

1.第一时间想到是不是连接不够了。实际上连接还未满,排除连接数原因。

2.应为是高并发系统,检查了下数据库参数innodb_thread_concurrency=32,测试是不是这个参数影响,改为0后,没啥用,排除问题

3.查看数据库open_files_limits 发现参数限制打开文件数为5000个,感觉有点不够。(下图为本机的),于是修改open_file_limits参数为65535,修改过程如下。

查看官方文档:open_files_limits mysql官方描述,此参数是全局只读的,不可修改,自动控制的

wanted_files= 10+max_connections+table_cache_size*2;=10+3000+64*2=3138 max_connections*5=15000

open_files_limit 在my.cnf配置时候的值

如果不配置就是wanted_files max_connections*5 和ulimit -n中的最大者

那如何手动修改?找了一会后,需要修改mysql注册服务文件,limitNOFILE参数。修改后需要 systemctl daemon-reload生效。

修改后,重启mysql服务,查看open_files_limits参数,修改成功。

3,修改成功压测,还是1135 ,google几篇文章后,有说MySQL bug的,看了MySQL官方论坛问题,大部分说Ulimit 设置问题,于是检查服务器ulimit设置,发现最大文件打开数5000

ulimit

-a 查看配置

-n最大文件打开数

-u 进程数目:用户最多可启动进程

发现不是特别大,但是也算正常 ulimit -n显示的7000多,可能也有人调整过。于是建议调整为65535重启服务器后,问题依然还在1135,于是怀疑还有什么限制。

网上说有几个地方设置会覆盖limits.conf 配置。里面的配置会覆盖limits.conf,于是让去查找问题服务器,就是没发现这个东西。脑瓜疼。

4.第二天一大早,想想是不是他们操作系统的限制问题是不是在别的地方,于是乎find / - name *-nproc.conf 然而啥都没,于是想想google看看是不是limits.conf 设置不生效,山回路转,柳暗花明,突然看到个博客说sesu操作系统的limits.conf设置了也不生效的。

博客中说:

SUSE 12上增加了systemd的资源控制,其中默认参数为 #DefaultTasksMax=512,限制MySQL打开进程数最大512 ,一下想起来昨晚压测试后看到mysql 连接到512就不动了。

于是操作一波:

service mysql status 没看错,就是限制512,突然有点眉目,改

改成65535

/etc/systemd/system.conf,修改DefaultTasksMax的值为65535,后面的值可根据需要修改,修改后systemctl daemon-reload。

查看是否修改成功:

5.重新压测,1135消失,终于算是解决了,后续的事情就是调整优化参数咯

6.总结,问题出在和线程相关的报错。理解:MySQL 连接到数据库服务,实际上是打开linux的一个文件句柄,从服务器最大文件打开数、用户最多启动线程数入手,排查问题, 历经修改数据库最大文件打开数,服务器最大文件打开数、最大线程数等,最终发现SUSE 12上增加了systemd的资源控制,其中默认参数为 #DefaultTasksMax=512,限制MySQL打开进程数最大512。对于Centos系统会限制的地方在/etc/security/limits.d/下面,*-nproc.conf会覆盖/etc/security/limits.conf配置

上一篇:软件测试培训之软件测试中的测试用例作用
下一篇:软件测试培训之国外商用测试管理工具简介
相关文章

 发表评论

暂时没有评论,来抢沙发吧~