【问题标题】:Can not increase max_open_files for Mysql max-connections in Ubuntu 15无法在 Ubuntu 15 中为 Mysql max-connections 增加 max_open_files
【发布时间】:2015-09-03 05:55:17
【问题描述】:

我正在运行这个版本的 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 最大连接数提高到 500。

在这一点上,我非常感谢一些帮助。

非常感谢。

【问题讨论】:

  • 嘿@BK435,感谢分享链接。可悲的是,我尝试了那里的步骤并不断收到相同的警告,并且无法增加 max_open_filesmax_connections

标签: mysql performance ubuntu


【解决方案1】:

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 stopservice mysql restart 时将需要 300 秒超时)然后将以下行添加到同一个 /etc/systemd/system/mysql.service 文件修复它对我来说:

ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown

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

【讨论】:

  • 非常感谢@Matt 提供如此清晰的解释。先生,您拯救了白天和黑夜!
  • 有时您只需要遇到确切的问题才能真正知道在那种环境中该怎么做...很高兴您能帮助马特,+1
  • 最佳解决方案之一。
  • `LimitMEMLOCK=infinity',它是什么?为什么不能为 LimitMEMLOCK 设置数字限制?
  • 据我所知,可以为任一参数设置数值。
【解决方案2】:

我建议您不要按照建议复制现有的 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

或您喜欢的任何限制。

【讨论】:

  • 我觉得/lib/systemd/是第一行的错字,应该是/etc/systemd/吗?
  • 运行良好,但在我的系统上,服务名称是 mysqld.service 而不是 mysql.service,所以在创建包含 limits.conf 文件的新目录时,我必须匹配它。
【解决方案3】:

从 MySQL 5.7.7 开始,这是文档为 Red Hat Enterprise 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

【讨论】:

  • 在尝试了我在谷歌搜索/阅读该主题时发现的几乎所有其他解决方案之后,这个终于奏效了!谢谢!
【解决方案4】:

使用 systemd 文件 override.conf 不需要搜索或可能创建。只需使用以下命令:

sudo systemctl edit mysql

如果文件override.conf存在,则读入,否则立即创建。

其余的,正如 Frederik 所写:输入 LimitNOFILE 并重新启动服务。

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 2020-04-08
    • 1970-01-01
    • 2022-12-22
    • 2016-05-08
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多