mysql 系统用户最大文件打开数限制
纸上得来终觉浅,绝知此事多宕机...记录一下自己很蠢的一次故障处理过程。
上周的时候,一个刚上线的系统又开始反映登不上了,因为最近这个系统也老是出现这个问题,开发也一直在找问题中,所以也没太在意。于是登上操作系统,mysql -uroot -p登录数据库,然后就一直没反应,登不上...
交代一下,mysql是装在mysql用户下的,装的时候虽然对数据库参数有进行调优,但是操作系统层面没做调整,所以mysql用户的最大文件打开数限制为默认的1024,用ulimit -n可以查询。然后我在用mysql的root账号登录数据库的时候也是在mysql这个系统用户下登录的,然后看了下当时服务器的负载,cpu和内存这些都很正常,但是存在大量应用到数据库的连接。
到这儿问题应该就很清楚了,系统用户mysql文件打开数可能达到了最大限制,当然不能打开更多的连接。
然而当时我并没有想到这一点,我想到的不是换个系统用户登录,不是停掉应用,而是重启数据库。。。而且这个数据库跑的不只这一个业务,虽然也都不是什么重要的业务。。。
于是我就准备重启数据库,仍然是在mysql用户下执行mysqladmin -uroot -p shutdown。毫无疑问,这肯定也是没有反应的,道理跟前面root账号连不上数据库是一样的,ctrl+C后有以下报错
^Cmysqladmin: connect to server at 'localhost' failed
error: 'Lost connection to MySQL server at 'waiting for initial communication packet', system error: 4'
然后我就做了个更蠢的操作,虽然想着可能会丢数据,杀掉了mysql进程。。。然后重启mysql,系统也就可用了。是真的很蠢,做完之后马上就想起有多种更好的处理方法,却选择了最蠢的一种。
今天再登上数据库看的时候,发现有几个参数跟我配置文件里写的不一样,比如max_connections、table_open_cache等,都是设置的默认值,看了下上次启动日志,确实也有告警
--15T08::.038750Z [Warning] Changed limits: max_open_files: (requested )
--15T08::.038911Z [Warning] Changed limits: max_connections: (requested )
--15T08::.038916Z [Warning] Changed limits: table_open_cache: (requested )
很明显,mysql根据参数设置计算了实例需要打开的最大文件数超过了当前系统用户的最大限制,于是没有使用该参数而使用了默认值。当然启动起来数据库也是可用的,启起来后也可以手动把设置参数
set global max_connections=;
set global table_open_cache=;
只不过就很有可能出现我之前出现的问题了,也就是数据库连接数并没有达到max_connections的限制,用户仍然连接不上。需要说明的是,正常情况下就算连接数满了,mysql仍然会为root用户保留一个连接,也就是root用户是可以登录数据库查看问题的。
要解决也很简单,增大操作系统用户mysql的限制值就行了,在配置文件/etc/security/limits.conf后面加上新的限制值就行了。
mysql soft nofile
mysql hard nofile
mysql 系统用户最大文件打开数限制的更多相关文章
- Linux下设置最大文件打开数nofile及nr_open、file-max
在开发运维的时候我们常常会遇到类似“Socket/File: Can’t open so many files”,“无法打开更多进程”,或是coredump过大等问题,这些都可以设置资源限制来解决.今 ...
- 【Linux命令】ulimit设置最大文件打开数
一.简介 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默 ...
- ulimit 命令详解 socket查看linux最大文件打开数
ulimit 命令详解 Linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数 可以用ulimit -a 来显示当前的各种用户进程限 ...
- linux最大文件打开数和swap限制
linux最大文件打开数和swap限制 逑熙 关注 2017.07.24 15:39* 字数 388 阅读 314评论 0喜欢 0 linux 2.6+的核心会使用硬盘的一部分做为SWAP分区,用 ...
- Centos7修改默认最大文件打开数
方法一: [root@bogon ~]# vi /etc/systemd/system.conf [root@bogon ~]# cat /etc/systemd/system.conf # This ...
- 调整Linux的最大文件打开数
要调整一下Linux的最大文件打开数,否则squid在高负载时执行性能将会很低.另外,在Linux下面部署应用时,有时候会遇上 Socket/File:Can’t open so many files ...
- [转帖]备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改
备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改 https://blog.csdn.net/toontong/article/details/50440272 ...
- linux 最大文件打开数
配置文件 vim /etc/security/limits.conf # /etc/security/limits.conf##This file sets the resource limits ...
- Centos修改文件打开数限制
一.查看系统限制最大打开数 cat /proc/sys/fs/file-max 还有一个问题是file-max最大能设置多大呢?一个经验算法是 256个fd 需4M内存.例如8G内存,8*1024/4 ...
随机推荐
- hihocoder [Offer收割]编程练习赛12 [1494] ---- 一面砖墙
原题链接 一面砖墙 算法分析 设墙的宽度为 range,则需要统计横坐标为 1,2,3,4,...,range-1 处的墙缝数,取最大的墙缝数(记为maxCrevices),从该处划一道竖线,竖线穿过 ...
- CentOS7系列--5.3CentOS7中配置和管理Kubernetes
CentOS7配置和管理Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将D ...
- (项目积累的)SQL数据库点滴
最近的的系统用的数据库是mssql,软件mssql 2008 r2 1.存储过程:后勤的综合管理系统(后端内网访问)三层架构配套用的是存储过程,里面列表展示的都是用存储过程,如下: 1)数据库脚本 U ...
- Android 通过URL获取网络资源
1.先在AndroidManifest.xml中注册加入访问因特网服务的权限: <uses-permission android:name="android.permission.IN ...
- 多个raq导出一个excel2007中
需求描述: 客户以前通过润乾API把多个raq模板数据来导出到一个excel文件中,由于现在数据量过大一个raq数据就超过了65535,原来的2003接口已经满足不了现在的需求, ...
- leetcode 之 Same Tree
1.题目描述 Given two binary trees, write a function to check if they are the same or not. Two binary tre ...
- EJB系列 - EJB基础知识
本人博客文章网址:https://www.peretang.com/basic-knowledge-of-ejb/ 什么是EJB 可移植的, 可重用的, 可伸缩的业务应用程序的平台 为什么选择EJB ...
- cookie 常用的几种方法
{ setCookie: function(sName, sValue, oExpires, sPath, sDomain, bSecure) { var sCookie = sName + &quo ...
- Vue2学习笔记:键盘事件
Vue2键盘事件:keydown/keyup... 1.使用 <!DOCTYPE html> <html> <head> <title></tit ...
- centos安装epel源后,使用报错(Error: Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify its path and try again)
报错如下: Error: Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify it ...