MySQL用户运行MySQL服务时最大能打开的文件数,是由limits.conf文件和pam_limits.so模块共同决定的。pam_limits.so模块是一个PAM(插入式认证模块)的组件,它可以在用户登录时设置一些资源限制,例如打开文件数、内存使用量、进程数等。limits.conf文件是pam_limits.so模块的配置文件,它定义了不同用户或用户组的资源限制。
MySQL服务能打开的文件数与limits.conf是有关联的,但不是唯一的因素。除了limits.conf文件,还有其他几个参数会影响mysql服务能打开的文件数,例如open-files-limit、innodb-open-files、table-open-cache、table-definition-cache等。
当MySQL用户启动MySQL服务时,它会先通过PAM进行认证,然后pam_limits.so模块会读取limits.conf文件中的配置,根据MySQL用户的身份,设置相应的资源限制,包括打开文件数。这样,MySQL服务就会受到limits.conf文件的影响,不能超过指定的打开文件数。如果要修改这个限制,可以编辑limits.conf文件,或者在MySQL的配置文件中设置open-files-limit参数。
MySQL运行是开机自启的,那么它是通过系统服务的方式启动的。系统服务的启动方式有多种,例如systemd、init.d、upstart等。不同的启动方式可能会有不同的PAM配置文件,例如systemd的PAM配置文件是/etc/pam.d/systemd-user,init.d的PAM配置文件是/etc/pam.d/init。这些配置文件会指定哪些PAM模块需要加载,以及如何加载它们。一般来说,这些配置文件会包含pam_limits.so模块,从而使得limits.conf文件的设置生效。
MySQL运行用户是mysql用户,那么它是通过mysql用户的身份进行PAM认证的。PAM认证的过程是这样的:当mysql用户启动MySQL服务时,它会先调用PAM库函数,例如pam_start(),pam_authenticate(),pam_acct_mgmt()等。这些函数会根据PAM配置文件,加载相应的PAM模块,例如pam_unix.so,pam_ldap.so,pam_limits.so等。这些模块会对mysql用户进行身份验证,授权,资源限制等操作。如果验证成功,mysql用户就可以运行MySQL服务了。
pam.d 文件夹下的文件是用来配置和管理用户认证的,每个文件对应一个服务或应用程序,例如login, sshd, sudo等。这些文件的内容都遵循一定的格式,分为四列,分别是模块类型,控制标记,模块路径和模块参数。模块类型表示不同的认证任务,例如auth, account, session, password等。控制标记表示如何处理模块的返回值,例如required, requisite, sufficient, optional等。模块路径表示要调用的PAM模块的位置,例如pam_unix.so, pam_limits.so等。模块参数表示传递给模块的选项,例如debug, nullok, minlen等。
简单介绍一下各文件的用途:
- chfn: 用于修改用户的finger信息,例如姓名,电话,地址等。
- chsh: 用于修改用户的登录shell。
- config-util: 用于配置一些系统工具,例如authconfig, system-config-authentication等。
- crond: 用于控制cron服务的用户认证,例如定时任务的执行。
- fingerprint-auth: 用于支持指纹识别的用户认证。
- fingerprint-auth-ac: 用于支持指纹识别的用户认证,与fingerprint-auth类似,但是会检查用户是否被锁定。
- login: 用于控制用户的登录认证,例如密码,shell,资源限制等。
- other: 用于控制一些没有专门的PAM配置文件的服务或应用程序的用户认证。
- passwd: 用于控制用户的密码修改,例如密码强度,过期时间等。
- password-auth: 用于支持多种密码认证方式的用户认证,例如本地,LDAP,Kerberos等。
- password-auth-ac: 用于支持多种密码认证方式的用户认证,与password-auth类似,但是会检查用户是否被锁定。
- polkit-1: 用于控制PolicyKit的用户认证,PolicyKit是一种框架,用于授权非特权用户执行特权操作。
- postlogin: 用于控制用户登录后的会话管理,例如显示登录信息,记录登录日志等。
- postlogin-ac: 用于控制用户登录后的会话管理,与postlogin类似,但是会检查用户是否被锁定。
- remote: 用于控制远程用户的登录认证,例如rlogin, rsh, rcp等。
- runuser: 用于控制runuser命令的用户认证,runuser命令用于切换用户身份,但不需要输入密码。
- runuser-l: 用于控制runuser -l命令的用户认证,runuser -l命令用于切换用户身份,并启动一个新的登录shell。
- smartcard-auth: 用于支持智能卡的用户认证。
- smartcard-auth-ac: 用于支持智能卡的用户认证,与smartcard-auth类似,但是会检查用户是否被锁定。
- smtp: 用于控制邮件发送的用户认证,例如sendmail, postfix等。
- smtp.postfix: 用于控制postfix邮件服务器的用户认证。
- sshd: 用于控制ssh服务的用户认证,例如密码,公钥,指纹等。
- su: 用于控制su命令的用户认证,su命令用于切换用户身份,通常需要输入密码。
- su-l: 用于控制su -l命令的用户认证,su -l命令用于切换用户身份,并启动一个新的登录shell。
- sudo: 用于控制sudo命令的用户认证,sudo命令用于以另一个用户的身份执行命令,通常需要输入密码。
- sudo-i: 用于控制sudo -i命令的用户认证,sudo -i命令用于以另一个用户的身份执行命令,并启动一个新的登录shell。
- systemd-user: 用于控制systemd用户服务的用户认证,systemd是一种系统和服务管理器。
- system-auth: 用于支持多种系统认证方式的用户认证,例如本地,LDAP,Kerberos等。
- system-auth-ac: 用于支持多种系统认证方式的用户认证,与system-auth类似,但是会检查用户是否被锁定。
- vlock: 用于控制vlock命令的用户认证,vlock命令用于锁定一个或多个终端。
- vmtoolsd: 用于控制VMware Tools守护进程的用户认证,VMware Tools是一组增强虚拟机性能和管理的工具。