首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mariadb上设置open_files_limit

如何在mariadb上设置open_files_limit
EN

Database Administration用户
提问于 2018-02-27 14:40:27
回答 1查看 13.4K关注 0票数 1

我遇到了一种奇怪的行为,我想更好地理解正在发生的事情。我在my.cnf中设置了该部分中的参数open_files_limit = 32000。我重新启动了MariaDB。我有两个进程mysqld_safe和mysql。

ps的结果:

代码语言:javascript
复制
root     10439     1  0 11:27 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe 
--datadir=/var/lib/mysql/data
--pid-file=/var/lib/mysql/data/rcentdb02.pid

mysql    10880 10439  0 11:27 pts/1    00:01:14 /usr/sbin/mysqld --basedir=/usr
--datadir=/var/lib/mysql/data --plugin-dir=/usr/lib64/mysql/plugin --user=mysql
--log-error=/var/lib mysql/data/rcentdb02.err --open-files-limit=32000 
--pid-file=/var/lib/mysql/data/rcentdb02.pid --socket=/var/lib/mysql/mysql.sock
--port=3306

cat /proc/$(pgrep mysqld_safe$)/limits的结果

代码语言:javascript
复制
Max open files            32000                32000                files

cat /proc/$(pgrep mysqld$)/limits \ grep "Max open“的结果:

代码语言:javascript
复制
Max open files            90162                90162                files

我的问题是:为什么mysql_safe对open_files_limit有很好的参数,而不是mysqld过程?

谢谢。

显示像'open_files_limit‘这样的全局变量的结果是90162。我试图从open_files_limit中删除my.cnf,但它不起作用。

我总是有这个值90162,似乎没有任何设置.

有什么想法吗?

我将my.cnf设置为:

代码语言:javascript
复制
[mysqld]
open_files_limit = 32000
[mysqld_safe]
open_files_limit = 32000

我停止mysql并启动mysql。显示全局变量的结果,如‘open_files_ LIKE’;=> 90162

我将open_files_limit的值更改为100000,现在查询的结果显示像'open_files_limit‘这样的全局变量是100000。所以现在我的问题是:我知道mysql可以自动调整这个参数,但是他如何选择一个比系统限制更高的值(90162)?

有根帐户:

代码语言:javascript
复制
ulimit -Sn => 1024
ulimit -Hn => 4096

使用mysql帐户(我将nologin改为bash进行测试):

代码语言:javascript
复制
ulimit -Sn => 32000
ulimit -Hn => 64000
EN

回答 1

Database Administration用户

发布于 2018-02-27 15:53:29

您可能必须登录到MariaDB并运行

代码语言:javascript
复制
SHOW GLOBAL VARIABLES LIKE 'open_files_limit';

看看这是32000还是90162。我的目标可能是限制它。

完全有可能打开_文件_限制正在进行自动调整。文档上写着Default:5000, with possible adjustmentMaximum:platform dependent

下面是mysqld_safemysqld的交互方式:

根据MySQL关于mysqld_safe的文档:

mysqld_safe的许多选项与mysqld的选项相同。见5.1.4节,“服务器命令选项”。mysqld_safe未知的选项如果在命令行中指定,则传递给mysqld,但如果在选项文件的组中指定,则忽略它们。见4.2.6节,“使用选项文件”。

您可能需要做的是从open_files_limit中删除my.cnf,让mysqld_safe将它所知道的值分配给mysqld

然后,重新启动mysqld

更新2018-02-28 08:24 EST

您可能需要在[mysqld_safe]中添加my.cnf头并放置open_files_limit=32000,如下所示:

代码语言:javascript
复制
[mysqld_safe]
open_files_limit=32000

但是,不要重新启动mysqld。这可能无法正确终止mysqld_safe,因为它包含一个不确定的循环,用于检查mysqld终止时的返回代码。有一个返回值可以让mysqld_safe知道如何重新启动mysqld。这意味着mysqld_safe在处理mysqld重新启动时不会终止。

最好分两步重新启动。

代码语言:javascript
复制
service mysql stop && service mysql start

执行service mysql stop将终止mysqld,然后退出mysqld_safe中的不定循环,终止mysqld_safe。然后,启动service mysql start将启动一个新的mysqld_safe进程。试试看让我们知道。

如果不能编辑my.cnf,则在命令行上指定选项:

代码语言:javascript
复制
service mysql stop && service mysql start --open-files-limit=32000
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/198920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档