在Ubuntu 15中无法为Mysql max-connections增加max_open_files

her*_*cia 28 mysql ubuntu performance

我正在运行这个版本的Mysql

Ver 14.14 Distrib 5.6.24, for debian-linux-gnu (x86_64)
Run Code Online (Sandbox Code Playgroud)

在这个版本的Ubuntu上

Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid
Run Code Online (Sandbox Code Playgroud)

这是我为Mysql设置的配置:

key_buffer_size     = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
innodb_buffer_pool_size=20G
innodb_log_buffer_size=16M
tmp_table_size = 32M
max_heap_table_size = 32M
open-files-limit=4510
max_connections=500
myisam-recover         = BACKUP
query_cache_type=1
query_cache_limit   = 32M
query_cache_size        = 32M
Run Code Online (Sandbox Code Playgroud)

这些是我在启动MYSQL时遇到的警告:

2015-06-17 17:28:53 26720 [Warning] Buffered warning: Could not increase number 
of max_open_files to more than 1024 (request: 4510)

2015-06-17 17:28:53 26720 [Warning] Buffered warning: Changed limits: max_connections: 
214 (requested 500)

2015-06-17 17:28:53 26720 [Warning] Buffered warning: Changed limits: table_open_cache: 
400 (requested 2000)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这些步骤:

1)将此添加到 /etc/security/limits.conf

mysql           soft    nofile          65535
mysql           hard    no file          65535
Run Code Online (Sandbox Code Playgroud)

2)将此添加到/etc/pam.d/common-auth/etc/pam.d/commom-session

session required pam_limits.so
Run Code Online (Sandbox Code Playgroud)

3)将其添加到 /etc/mysql/mysql.conf.d/mysqld.cnf

open-files-limit=4510 or open_files_limit=4510
Run Code Online (Sandbox Code Playgroud)

这些都没有用,我仍然无法将mysql max连接提升到500.

在这一点上,我真的很感激一些帮助.

非常感谢提前.

Mat*_*nes 80

Ubuntu已从版本15.04从Upstart迁移到Systemd,不再遵守/etc/security/limits.conf中对系统服务的限制.这些限制现在仅适用于用户会话.

MySQL服务的限制在Systemd配置文件中定义,您应该将其从默认位置复制到/ etc/systemd,然后编辑副本.

sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
sudo vim /etc/systemd/system/mysql.service # or your editor of choice
Run Code Online (Sandbox Code Playgroud)

将以下行添加到文件的底部:

LimitNOFILE=infinity
LimitMEMLOCK=infinity
Run Code Online (Sandbox Code Playgroud)

您还可以设置数字限制,例如LimitNOFILE=4510.

现在重新加载Systemd配置:

sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

重启MySQL,它现在应该遵守max_connections指令.

升级到15.04后,我也在干净地停止MySQL方面遇到了问题.如果这会影响你(你会知道,因为它会拍摄300秒的时候,你对超时service mysql stopservice mysql restart),然后将下面的行固定对我来说同样/etc/systemd/system/mysql.service文件:

ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
Run Code Online (Sandbox Code Playgroud)

后一个问题似乎已经修复了16.04并且不再需要此行,因此在进行分发升级之前,您需要停止MySQL并ExecStop从配置文件中删除该行.

  • 非常感谢@Matt这样清晰的解释。先生,您白天黑夜都得救了! (2认同)

小智 14

从MySQL 5.7.7开始,这就是文档为红帽企业Linux 7,Oracle Linux 7,CentOS 7,SUSE Linux Enterprise Server 12,Fedora 24和25推荐的内容:

https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html

在Ubuntu 16.04上,该服务被称为mysql,而不是mysqld,所以这就是我所做的:

sudo mkdir /etc/systemd/system/mysql.service.d
sudo vi /etc/systemd/system/mysql.service.d/override.conf
Run Code Online (Sandbox Code Playgroud)

在新文件override.conf中添加了这个:

[Service]
LimitNOFILE=5000
Run Code Online (Sandbox Code Playgroud)

然后重启服务:

sudo systemctl daemon-reload
sudo systemctl restart mysql
Run Code Online (Sandbox Code Playgroud)


Ber*_*oer 7

我建议你不要按照建议复制现有的mysql.service文件,只需创建一个只包含你关心的更改的文件.所以:

mkdir /lib/systemd/system/mysql.service.d
vim /etc/systemd/system/mysql.service.d/limits.conf
Run Code Online (Sandbox Code Playgroud)

limit.conf的内容很简单:

[Service]
LimitNOFILE=10000
LimitMEMLOCK=10000
Run Code Online (Sandbox Code Playgroud)

或者你喜欢的任何限制.

  • 我认为`/ lib/systemd /`是第一行的拼写错误,应该是`/ etc/systemd /`? (3认同)