Ubuntu中Mysql 5.7的open_files_limit默认值过小导致的server has gone away问题解决

Mysql 5.7的open_files_limit 默认值为 1024,连接数过多和打开表,都会占用这个值。

问题:MySQL server has gone away

原因:open_files_limit默认值过小,导致mysql报错:Too many open files,进而mysql停止服务。

其它很多情况都会引起 gone away ,具体情况需要查询mysql的错误日志,本文主要解决由 open_files_limit 值引起的问题。


解决步骤:


第1步、修改 mysql.cnf 文件中

open_files_limit        = 65535

如果没有则在 [mysqld] 后面添加一行

修改上述值重启mysql后,配置不会生效,在ubuntu中,还需要继续以下操作


第2步、修改 /lib/systemd/system/mysql.service 文件

在末尾添加

LimitNOFILE=infinity

LimitMEMLOCK=infinity

其中infinity是无限的意思,实测在笔者这台机器上的真实上限是:1048576

你也可以设置一个具体的值,如:

LimitNOFILE=65535

LimitMEMLOCK=65535


第3步、使配置生效

sudo systemctl daemon-reload

service mysql restart

如果你使用了 php-fpm ,你可能还需要重启 php-fpm 

service php7.0-fpm restart


如果修改上述配置后仍然未达到指定数值,那么你还需要修改linux系统的 ulimit 限制,此部分修改方法请自行百度。