我正在运行此版本的Mysql
Ver 14.14 Distrib 5.6.24, for debian-linux-gnu (x86_64)
在这个版本的Ubuntu
上Distributor ID: Ubuntu
Description: Ubuntu 15.04
Release: 15.04
Codename: vivid
这是我为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
这些是我在启动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)
我已经尝试过这些步骤:
1)将其添加到/etc/security/limits.conf
mysql soft nofile 65535
mysql hard no file 65535
2)将其添加到/etc/pam.d/common-auth
和/etc/pam.d/commom-session
session required pam_limits.so
3)将其添加到/etc/mysql/mysql.conf.d/mysqld.cnf
open-files-limit=4510 or open_files_limit=4510
这些都没有用,我仍然无法将mysql max连接提升到500。
我现在非常感谢你的帮助。
提前多多感谢。
答案 0 :(得分:78)
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
将以下行添加到文件的底部:
LimitNOFILE=infinity
LimitMEMLOCK=infinity
您还可以设置数字限制,例如LimitNOFILE=4510
。
现在使用:
重新加载Systemd配置sudo systemctl daemon-reload
重启MySQL,它现在应该遵守max_connections指令。
升级到15.04后,我也在干净地停止MySQL方面遇到了问题。如果这会影响到您(您知道因为当您执行service mysql stop
或service mysql restart
时需要300秒才能超时),然后将以下行添加到同一个/ etc / systemd / system / mysql中。服务文件为我修好了:
ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
后一个问题似乎已经修复了16.04并且不再需要此行,因此在进行分发升级之前,您需要停止MySQL并从配置文件中删除ExecStop
行。 / p>
答案 1 :(得分:12)
从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
在新文件override.conf中添加了这个:
[Service]
LimitNOFILE=5000
然后重新启动服务:
sudo systemctl daemon-reload
sudo systemctl restart mysql
答案 2 :(得分:7)
我建议您不要按照建议复制现有的mysql.service文件,只需创建一个只包含您关注的更改的文件。所以:
mkdir /lib/systemd/system/mysql.service.d
vim /etc/systemd/system/mysql.service.d/limits.conf
limits.conf的内容很简单:
[Service]
LimitNOFILE=10000
LimitMEMLOCK=10000
或您喜欢的任何限制。
答案 3 :(得分:3)
使用systemd时,不需要搜索或可能创建文件override.conf。只需使用以下命令:
sudo systemctl edit mysql
如果文件override.conf存在,则将其读入,否则可以立即创建。
其余的,正如Frederik写道:输入LimitNOFILE并重新启动服务。