1

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

记住:

  1. 每个脚本都有唯一的 DBH 和 STH 句柄,所以不应该有连接冲突
  2. MySQL 上的 max_connections 设置为 150
  3. 没有 MySQL 错误日志
  4. 我已验证连接已打开并立即关闭
  5. while($sta->fetch()) 循环内没有嵌套的数据库调用
  6. 我已登录 mysql shell,并且 MySQL 似乎在 DBI 引发错误之前和之后立即正常运行

这是错误:

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";

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

更新 - - - -

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

4

0 回答 0