2012-02-02 101 views
1

我按顺序运行三个perl脚本。它们每个都连接到Mysql数据库多次,并选择或更新数据库中包含的信息。运行这三个脚本大约20次(&连接/断开数据库的次数比这个多),我得到'无法连接到'localhost'(10055)上的MySQL服务器的消息。无法连接到'localhost'上的MySQL服务器(10055)

我已经读过其他地方可以使用mysql_auto_reconnect = 1重新连接到数据库,但我不完全确定这是问题所在。我的电脑上的Mysql服务器在程序崩溃时仍然连接 - 我不必重新启动它。我想了解它为什么这样做,而且我也不完全确定我如何放置'mysql_auto_reconnect = 1',因为当我这样做时,它告诉我DBI->使用旧式语法的连接已被弃用。

my $dbh_m= DBI->connect("dbi:mysql:XXX","root","XXX","mysql_auto_reconnect=1") 

or die(“Error select at Trans:$ DBI :: errstr”);

我每次连接数据库时都需要写这个吗? (将其放入其中一个连接并不能解决问题,但我仍然收到所有其他连接的错误消息 - 它不会再开始运行,然后再重新崩溃)。这是我连接/断开数据库很多次的问题吗?

谢谢!

回答

1

你会得到什么错误信息?

你或许应该这样做:

my $dbh; 
{ 
    local [email protected]; 
    do { 
     eval { 
      $dbh = DBI->connect("dbi:mysql:XXX", "root", "XXX", { mysql_auto_reconnect => 1 }) 
     }; 
     if ([email protected]) { 
      warn "Error: $DBI::errstr\n"; 
      warn "Trying to reconnect in 5 sec.\n"; 
      sleep 5; 
     } 
    } while ([email protected]); 
} 

就在数据库没有响应,或者有太多的连接情况。

+0

谢谢,我用过这个。看起来我连接/断开数据库的次数太多了,打开数据库并运行多个查询并只在程序结束时断开连接会更好吗?我得到的错误是'无法连接到'localhost'(10055)上的MySQL服务器,并且在准备时出现问题 – Lisa 2012-02-03 11:00:36

+0

您应该检查您的MySQL配置文件并且如果它太低,请增加最大连接限制。 而且,是的 - 通常你只需要连接数据库一次。 – JackTheRandom 2012-02-06 12:14:06

3
DBI->connect("dbi:mysql:XXX", "root", "XXX", { mysql_auto_reconnect => 1 }) 
+0

即使把在的时候,我仍然得到同样的错误弹出(已经把它我做的每一个连接上) – Lisa 2012-02-02 10:17:33

+0

这可能是,但你问的问题是关于如何使用'mysql_auto_reconnect' – ikegami 2012-02-02 19:30:04

+0

是的,谢谢你的帮助 – Lisa 2012-02-03 11:35:58

0

也许你没有断开你的脚本完成后的MySQL?

它在mysql中占用资源。请检查mysql日志以寻求线索。

问候,

+0

我正在连接/断开每个更新/选择语句,我做了什么,这是我应该做的,还是应该只在程序结束时断开连接?我以为这是发生的,因为我在很短的时间内连续拍了很多次谢谢! – Lisa 2012-02-03 11:34:19

+0

如果我是你,我在程序中使用一个连接/断开连接。检查每个数据库操作后的错误(选择/插入等)。如果不成功,则尝试重新连接并执行相同的语句。 – user1126070 2012-02-13 09:03:43

+0

还有一个想法:如果你不使用自动提交,也许你正在用大量事务处理资源。 – user1126070 2012-02-13 09:04:31

-1

如何修复MySQL错误10055 要解决这个问题就需要增加动态端口的数量。 运行以下命令会给你50000个端口供动态使用。

在Windows Server 2008 R2 打开命令提示符

键入以下
netsh int ipv4 set dynamicport tcp start=10000 num=50000
按Enter键

键入以下
netsh int ipv4 set dynamicport udp start=10000 num=50000
按Enter键

键入以下
netsh int ipv6 set dynamicport tcp start=10000 num=50000
按Enter键

键入以下
netsh int ipv6 set dynamicport udp start=10000 num=50000
按Enter键

+1

复制没有归属于[这里](http://blog.whitesites.com/How-to-Fix-MySQL-Error -10055__635140180116307813_blog.htm) – 2016-06-16 17:53:08

相关问题