娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

mysql 报错too many open files解决办法

os:centos7

mysql:5.7.28

产生这个错误的原因是造成mysql连接数大于设置的open_files_limit参数值,而这个参数又受限于操作系统,假如你的mysql是使用systemctl启动的,那么就会受制于systemctl的配置,我这里是通过systemctl启动的mysql,修改的地方如下

1、首先修改操作系统的限制

根据应用权限,分为系统级和用户级,系统级的修改影响所有用户,而用户级只影响当前登录的用户,这两种方法都可以

系统级需要修改/etc/sysctl.conf文件,需要修改这个参数fs.file-max,如果没有手动添加

fs.file-max = 1000000

修改完使用sysctl -p命令重新加载

也可以使用这个命令临时调整

sysctl -w fs.file-max=1000000

用户级可以直接通过命令ulimit -n设置的值修改,例如

ulimit -n 1024000
2、修改systemd服务限制

修改内容如下:

[root@centos systemd]# pwd
/etc/systemd
[root@centos systemd]# ls
bootchart.conf  coredump.conf  journald.conf  logind.conf  system  system.conf  user  user.conf
[root@centos systemd]# grep -v "^$" system.conf |grep -v "^#"
#需要将这行的注释打开,并修改值
DefaultLimitNOFILE=1024000
[root@centos systemd]#

然后重新reload

systemctl daemon-reload
3、修改mysql服务配置

mysql服务的配置文件一般在这两个地方

#这两个只需要有一个就可以了
/usr/lib/systemd/system/mysqld.service
/etc/systemd/system/multi-user.target.wants/mysqld.service

修改项目:数值根据需要填写

LimitNOFILE = 1024000

修改完记得reload

systemctl daemon-reload
4、修改my.cnf

在my.cnf文件中[mysqld]下增加

open_files_limit = 1024000

修改完重启mysql服务

systemctl restart mysqld
5、检查是否生效

可以登录mysql中查看

[root@mysql.sock][(none)]>show variables like '%open_files_limit%';
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| open_files_limit | 1024000 |
+------------------+---------+
1 row in set (0.01 sec)

[root@mysql.sock][(none)]>

也可以通过进程id查看

[root@centos ~]# ps -ef| grep mysql
mysql     89208      1  0 15:56 ?        00:00:01 /data/mysql/bin/mysqld --defaults-file=/data/mysql/etc/my.cnf --daemonize --pid-file=/data/mysql/data/mysql.pid
root      89663   6940  0 16:04 pts/0    00:00:00 grep --color=auto mysql
[root@centos ~]# cat /proc/89208/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             63373                63373                processes 
Max open files            1024000              1024000              files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       63373                63373                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        
[root@centos ~]#

也可以查看进程打开了多少文件数

[root@centos ~]# ps -ef| grep mysql
mysql     89208      1  0 15:56 ?        00:00:01 /data/mysql/bin/mysqld --defaults-file=/data/mysql/etc/my.cnf --daemonize --pid-file=/data/mysql/data/mysql.pid
root      89754   6940  0 16:06 pts/0    00:00:00 grep --color=auto mysql
[root@centos ~]# lsof -p 89208|wc -l
71
[root@centos ~]#
赞(0)
未经允许不得转载:娃哈哈好喝 » mysql 报错too many open files解决办法
分享到: 更多 (0)