MySQL 5.7.10与Ruby on OSX 10.11.3有关

我在基于OSX 10.11.3的系统上成功安装了MysqL 5.7.10和RubyMysqL gem.我现在正在尝试运行以下代码

require 'MysqL'
require 'cgi'
class MysqLSaver
  def saveWordStats(globalWordStats,time)
    con = MysqL.new 'localhost', 'x', 'x', 'x'
    i = 0
    for word in globalWordStats.keys[0..10000]
      print "#{i}\r"
      i+=1
      stat = globalWordStats[word]
      time = time
      escaped_word = MysqL.escape_string(word)
      begin
        escaped_word = escaped_word.gsub("\\","")
        escaped_word = escaped_word.gsub("/","")

        escaped_word = escaped_word.gsub("-","")
        escaped_word = "#{escaped_word}_word"
        con.query("CREATE TABLE IF NOT EXISTS #{escaped_word}(percent DOUBLE, time INT)")
        con.query("INSERT INTO #{escaped_word}(percent,time) VALUES('#{stat}','#{time}')")
      rescue
        puts "#{$!}"
      end

    end
    con.close
    puts "DONE"
  end

end

代码可以正常运行.我能够在MysqL数据库中创建表和存储值.但是,如果我尝试使用此代码在我的数据库中创建/存储> =≈10.000值,则在脚本运行完毕后,我无法再连接到MysqL服务器:

MysqL.rb:5:in `new': Lost connection to MysqL server at 'reading initial communication packet', system error: 102 (MysqL::Error)
from /Users/david/Desktop/Birta2/MysqL.rb:5:in `saveWordStats'
from run.rb:84:in `<main>'

同样重启MysqL服务器也无济于事(只有重启我的整个mac才有帮助!).

发生错误后,我可以在MysqL日志文件中找到这条奇怪的行:

2016-02-11T18:20:51.177054Z 0 [Warning] File Descriptor 1098 exceedeed FD_SETSIZE=1024 

有没有办法解决这个错误

解决方法:

FD_SETSIZE是您可以一次打开的最大文件数.如果您正在使用InnoDB,则每个MysqLd进程会在活动数据库中为每个表保留一个文件,因此如果您有大量表或大量进程,则很容易超出.你可以在my.cnf中更改一些设置来解决这个问题.

table_open_cache是​​MysqL将立即尝试保持打开的表数:

table_open_cache = 1000

max_connections是允许的最大并发连接数(MysqLd进程):

max_connections = 25

如果您的数据库有N个表,则最好使N * table_open_cache * max_connections小于FD_SETSIZE.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...