前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 连接数被篡改到底为那般

MYSQL 连接数被篡改到底为那般

作者头像
AustinDatabases
发布2021-08-06 11:21:49
7490
发布2021-08-06 11:21:49
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

说这个问题是在是惭愧, 到底为什么惭愧结尾说, 事情是MYSQL 8.011 的一些机器的max_connections 经常被改为214, 而明明我们的设置的是2000的最大连接数, 但过一段时间就会被改为214.

这实际上问题来源于文件的open_files_limit , mysql 在读取数据的时候是需要打开文件的, 打开文件是需要获取LINUX 系统中的句柄的。

在LINUX 系统中单个进程打开的文件数是有限制的,而MYSQL 的MYSQLD 是通过一个工作进程进行工作的,单个进程的文件打开数就必须被进行扩大.

我们的系统出现的问题就是由于LINUX的单个进程打开文件限制没有打开,造成的这个问题.

在LINUX 中单个进程能够打开的最大文件句柄数量(socket连接也算在里面),系统默认值1024.通过 ulimit -n 可以看到当前的进程可以使用的最大打开的文件数.

实际上在 /etc/security/limits.conf 文件中需要添加如下的内容

同时可以进入MYSQL 数据库中,查看open_files_limit 这个值应与 limits.conf 文件中的值一致.

同时在修改后需要重启MYSQL的服务才能让修改后的参数生效.

另外如果这个值是错误是LINUX 默认的值,会产生 mysql的最大连接数无论你修改了 max_connections 后,还会变为 214这个值,影响整体系统的连接和运行.

另外我们也说说打开一张表的过程, 例如select 一张表, 我们首先需要建立一个table_share 的对象,在里面包含了 table_definition_cache, 同时里面包含相关的表的定义, 同时我们还要创建表的对象,如果表的对象在 table_open_cache中就不需要在提取,直接使用.否则还要打开文件提取. 同时已经load dict table 对象, 如果dictionary cache 中存在dict_table 则可以直接引用, 否则还的需要读取系统表空间中关于innodb 表的定义. 最后会创建file_tablespace , fil_node 对象在打开 ibd 文件读取数据.

以上都是需要打开文件的,打开文件就与我们上面的LINUX 的 打开文件的数量的限制有关.

而max_connections 的值,与文件打开之间是有关系的所以设置的max_connections 会在系统启动的时候被改变,根据你LINUX 可以打开的文件数. 最后与你设置的值不同.

问题找到了,剩下的就是改,然后重启数据库,另外一定不能有经验的理论,我们的错误在于之前提供给我们的LINUX 系统一直这些值都是设置的,所有我们就习以为常的不检测这块的问题,导致系统上线后,发生这样的问题.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档