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
在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 ~]#