Perl DBI 3个并发脚本写入MySQL表时出错

时间:2013-07-20 01:05:52

标签: mysql perl dbi

我在AWS EC2实例上有一个脚本,它将一堆行插入到另一个EC2实例上的MySQL数据库中的InnoDB表中。如果我运行脚本,一切正常,脚本按预期终止。如果我连续3次启动脚本以便生成三个进程,则每个脚本插入几千行后,所有脚本会同时死掉。为什么呢?

请记住:

  1. 每个脚本都有唯一的DBH和STH句柄,因此不应存在连接冲突
  2. MySQL上的max_connections设置设置为150
  3. 没有MySQL错误记录
  4. 我已经确认连接已经打开并立即关闭
  5. 一段时间内没有嵌套的数据库调用($ sta> fetch())循环
  6. 我已登录到mysql shell,并且在DBI抛出错误之前和之后,MySQL似乎正常运行
  7. 这是错误:

    DBI connect('database:45.218.216.31:3306','root',...) failed: Can't connect to MySQL server on '45.218.216.31' (99) at /home/ubuntu/perl/modules/custom.pm line 256
    

    无法在'45 .218.216.31上连接到MySQL服务器'(99)/home/ubuntu/perl/modules/custom.pm第256行连接失败。

    第256行是您的常规连接方法:

    my $dbh411a = DBI->connect($dsn, $db_user_name, $db_password) or die $DBI::errstr, "Connection failed";
    

    非常感谢任何想法 - 谢谢。

    UPDATE --------

    感谢所有评论的人,他们非常乐于助人。我能够通过遵循@jordanm关于在脚本持续时间内保持数据库连接打开的建议来修复脚本。最初,我们打开和关闭每个插入的连接,这比连接关闭时生成MySQL连接请求的速度快,直到最大化并拒绝任何新连接。

0 个答案:

没有答案