mysql 打开太多文件_关于mysql打开文件数过多

这是在使用 mysql 的过程中,困扰我很久的一个问题,今天终于找到根本原因,得以彻底解决,真是可喜可贺啊!下面详细地总结一下:

问题描述:在使用 mysql 的过程中发现,偶尔的查询或一段时间内的登录会失败,返回的错误提示信息为:Lost Connection During Query。

问题定位:这个问题在半年、甚至一年前都遇到过,由于它不是必现,往往你去看的时候没法重现,并且一个 mysql server 管理好多个数据库,查询又不是时刻发生的,常常不知所措。无法登录时,更是束手无策。最初,比较粗暴的方法是重启 mysql,问题在一段时间内能缓解。后来,使用 flush tables 也能在一段时间内缓解。再后来,通过查看 mysql 的错误日志,发现一共有三种提示信息:第一种:080724 19:55:05 [ERROR] Error in accept: Too many open files,这种明显是由于 mysql 打开文件个数过多,mysql 无法再“接收”新的连接进来,也就是没有办法登录,造成连接失败。第二种:080724 19:45:11 [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted,这种是放弃了排序,但没有说明原因。第三种:080725 9:30:33 [ERROR] /usr/local/mysql/bin/mysqld: Can't open file: 'OperateRecord.MRG' (errno: 24),这种是打开文件失败,错误码是24,通过 perror 查询详细的错误原因是:OS error code 24: Too many open files,也是打开文件过多。再通过 status 查看 mysql 的打开文件个数,此时一般都接近 1000 个。再通过 show variables 查看 mysql 的配置,默认其打开文件个数为 open_files_limit 为 2048,按道理说这个大小是足够的。

问题解决:

1、重启mysql服务,解决问题,如果没有解决,参考第二条(我自己这样搞解决了)

原来 mysql 中的 open_files_limit 只是限制 mysql 这个进程打开的最大文件个数。而内核也会对 mysql 打开的进程数进行限制,并且优先级要高。通过 ulimit -a 查看 mysql 这个用户的最大打开文件个数,发现其值为 1024(linux 默认都是1024)。原来,mysql 已经打开了近 1000 个表,若再打开一个 merge 表(包含100个子表),导致文件句柄过多而失败。通过修改 /etc/security/limits.conf 配置文件,添加如下行:*                -       nofile          4096,把该限制放大,重新启动 mysql ,问题得到彻底解决。

设置 mysql 打开文件限制方法:把 set-variable=open_files_limit=10240 加到配置文件中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值