mysql 2013错误,导致无法登陆mysql gui工具,而且dos也进不去,提示ping 127.0.0.1。
问题描述:使用 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。
2、设置 mysql 打开文件限制方法:
把 set-variable=open_files_limit=10240 加到配置文件中。