mysql Errcode: 24 - Too many open files

MySQL分区问题与解决
本文介绍了在MySQL中进行按天分区操作时遇到的文件过多错误,并详细解释了问题产生的原因及解决方案,包括调整my.cnf配置文件中的open_files_limit参数。

在对库的每个表进行按天分区过程中出现以下问题

Out of resources when opening file './CountersBackup_changzhou/DC_E_ERBS_EUTRANCELLTDD_V_HOUR_ERBS#P#p195.MYD' (Errcode: 24 - Too many open files)

Clipboard Image.png

原因:生成的文件超出了mysql中的open_files_limit的默认值

my.cnf里如果配置了open_files_limit,则open_files_limit最后取值为 配置文件 open_files_limit,max_connections*5, wanted_files= 10+max_connections+table_cache_size*2 三者中的最大值。

如果my.cnf里如果没配置open_files_limit,则open_files_limit最后取值为max_connections*5,10+max_connections+table_cache_size*2,ulimit -n中的最大者

解决办法:

修改my.conf,增加  open_files_limit=100000  取值尽量比生成的最大文件数大

### 解决方案概述 MySQL 报错 `Errcode: 13 - Permission denied` 是由于权限不足导致的,通常发生在尝试读取或写入某些目录或文件时。以下是针对该问题的具体分析和解决方案。 --- #### **确认错误场景** 根据描述,错误可能出现在以下几个方面: - MySQL 容器无法访问 `/etc/mysql/conf.d/` 目录。 - 数据目录 (`datadir`) 或其他相关路径的权限不正确。 - 文件系统的安全模块(如 AppArmor 或 SELinux)限制了 MySQL 对某些文件的访问[^5]。 --- #### **具体解决方法** ##### 方法一:调整容器内的目录权限 如果使用 Docker 部署 MySQL,则需要确保宿主机上的挂载目录具有正确的权限。执行以下命令来更改目录所有权: ```bash sudo chown -R mysql:mysql /path/to/host/mounted/directory ``` 其中,`/path/to/host/mounted/directory` 是你在运行容器时通过 `-v` 参数映射到容器内部的路径。例如,如果你将宿主机的 `/data/mysql` 映射到了容器中的 `/var/lib/mysql`,则应修改 `/data/mysql` 的权限[^4]。 --- ##### 方法二:检查并修复配置文件路径 当 MySQL 尝试加载 `/etc/mysql/conf.d/` 下的配置文件时发生权限拒绝,可以采取以下措施: 1. 确认 `/etc/mysql/conf.d/` 是否存在以及是否有内容。 2. 修改其权限以允许 MySQL 用户访问: ```bash sudo chmod 755 /etc/mysql/conf.d/ sudo chown -R root:root /etc/mysql/conf.d/ ``` 注意:虽然推荐将此目录归属于 `root` 用户,但也需确保 MySQL 能够正常读取它[^1]。 --- ##### 方法三:处理数据目录权限 对于本地安装而非 Docker 场景下的 MySQL 实例,验证数据存储位置是否设置了适当的安全属性。操作如下: 1. 查找默认的数据目录位置,在 my.cnf 中定位 datadir 设置项; ```ini [mysqld] datadir=/var/lib/mysql ``` 2. 应用合适的权限设定至上述指定区域: ```bash sudo chmod 700 /var/lib/mysql sudo chown -R mysql:mysql /var/lib/mysql sudo chgrp -R mysql /var/lib/mysql ``` 完成这些步骤后再重新启动服务以便生效变化[^4]: ```bash sudo systemctl restart mysqld ``` --- ##### 方法四:排查操作系统级防护干扰 有时即使手动修正了所有可见层面的许可状况仍无济于事,这可能是由 Linux 上启用的应用程序装甲(AppArmor)或者强制访问控制(MAC)框架SELinux引起的问题。可以通过临时禁用来测试效果: 关闭AppArmor: ```bash sudo aa-disable /usr/sbin/mysqld ``` 停用SELinux模式切换成permissive状态而不完全卸载掉功能: ```bash setenforce 0 ``` 假如以上任一步骤解决了原初遇到的情况,那么就需要进一步定制化规则而不是简单粗暴地移除保护层[^5]. --- ### 总结 综上所述,面对 MySQL 出现 Errcode 13 错误的时候可以从多个角度切入寻找根源所在,并依据实际情况选用恰当的办法予以应对。无论是调整外部共享资源还是深入探究内核策略都不可或缺。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值