MySQL套接字在数千次连续连接后拒绝连接

MySQL套接字在数千次连续连接后拒绝连接,mysql,sockets,ubuntu,connection,database-connection,Mysql,Sockets,Ubuntu,Connection,Database Connection,我目前正试图在一台当前Ubuntu机器上填充一个MySQL5.1数据库,其中包含超过5000000个条目。 由于程序的体系结构,每个INSERT语句都会打开和关闭一个新的数据库连接。我知道这是一个昂贵的操作,但是更改它需要更改大量代码,所以我宁愿避免这样做 我面临的问题是,一段时间后(通常约12秒,但重试后该数字会增加),此进程无法再连接到数据库。其他进程可以毫无问题地连接到数据库 我不认为这是MySQL的问题,因为MySQL日志中没有报告任何错误。此外,一次最多打开1个连接(我通过查看MySQ

我目前正试图在一台当前Ubuntu机器上填充一个MySQL5.1数据库,其中包含超过5000000个条目。 由于程序的体系结构,每个INSERT语句都会打开和关闭一个新的数据库连接。我知道这是一个昂贵的操作,但是更改它需要更改大量代码,所以我宁愿避免这样做

我面临的问题是,一段时间后(通常约12秒,但重试后该数字会增加),此进程无法再连接到数据库。其他进程可以毫无问题地连接到数据库


我不认为这是MySQL的问题,因为MySQL日志中没有报告任何错误。此外,一次最多打开1个连接(我通过查看MySQL状态变量来检查)

问题:在给定的时间范围内,可以打开多少个到套接字的连续连接有限制吗

下面是一个简化的perl脚本(实际的程序是Java的),它会导致相同的问题(不包括数据库变量):

#。。。
我的$i=0;
my$DBH=0;
对于($i=0;$i<$MAX;++$i){
$DBH=DBI->connect(“DBI:mysql:$DBNAME:$DBHOST:$DBPORT”,$DBUSER,$DBPW)
或死亡(“错误-连接到数据库失败:\n$i次正常\n”。DBI->errstr);
$DBH->断开连接;
如果($i%10000==0){
打印$i.“”;
}
}

问题:有什么建议/想法吗?

尝试增加/etc/mysql/my.cnf中允许的连接数

max_connections        = 300

如果使用php,请将mysql_connect()的所有实例更改为mysql_pconnect()?

因为您似乎很快打开和关闭TCP套接字,您可能正在积累处于
TIME\u WAIT
状态的套接字(请参阅),在Linux上,这可能会导致进程耗尽文件描述符(而在Windows上,这可能表现在同一个框中的所有进程无法连接,而不仅仅是单个进程,因为没有每个进程的套接字限制)

在运行插入代码的客户机和数据库所在的服务器上运行
netstat


如果您在
TIME\u WAIT
中累积套接字,则需要执行的操作取决于它们的位置(客户机或服务器)。

“但这可能会在同一个框中的所有进程中显示,而不仅仅是单个进程连接失败。”我不同意。进程可能会用完文件描述符,这些描述符是按进程分配的。建议不错!但是,我决定调整代码以使用持久连接。虽然这是一项大量工作,但值得一试,因为它现在可以工作了!我相信这是一个更好的解决方案。一次最多打开一个连接,不是吗哦,这不是问题!
max_connections        = 300