【问题标题】:Can't connect to MySQL server on 'localhost' (10055)无法连接到“localhost”上的 MySQL 服务器 (10055)
【发布时间】:2012-02-24 23:02:21
【问题描述】:

我正在依次运行三个 perl 脚本。它们中的每一个都多次连接到一个 Mysql 数据库,并选择或更新数据库中包含的信息。在运行这三个脚本大约 20~ 次(并且从数据库连接/断开连接的次数比这更多)后,我收到消息“无法连接到 'localhost' (10055) 上的 MySQL 服务器。

我在其他地方读到过,我可以使用 mysql_auto_reconnect=1 让它重新连接到数据库,但是我不完全确定这是问题所在。当程序崩溃时,我计算机上的 Mysql 服务器仍然连接 - 我不必重新启动它。我想了解它为什么这样做,而且我也不完全确定我是如何输入“mysql_auto_reconnect=1”的,因为当我这样做时,它告诉我 DBI->connect using old style syntax is deprecated。

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

or die("选择 Trans: $DBI::errstr 时出错");

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

谢谢!

【问题讨论】:

    标签: mysql perl


    【解决方案1】:
    DBI->connect("dbi:mysql:XXX", "root", "XXX", { mysql_auto_reconnect => 1 })
    

    【讨论】:

    • 即使将其放入,我仍然会弹出相同的错误(已将其放入我正在建立的每个连接上)
    • 可能是这样,但你问的问题是关于如何使用mysql_auto_reconnect
    【解决方案2】:

    你得到什么错误信息?

    你可能应该这样做:

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

    以防万一数据库没有响应或连接太多。

    【讨论】:

    • 谢谢,我用过这个。看来我连接/断开数据库的次数太多了,打开数据库并运行多个查询并且只在程序结束时断开连接会更好吗?我得到的错误是'无法连接到'localhost'(10055)上的MySQL服务器',并且准备有问题
    • 你应该检查你的 MySQL 配置文件,如果它太低,则增加最大连接限制。而且,是的 - 通常您只需要连接到数据库一次。
    【解决方案3】:

    也许当你的脚本完成时你没有断开与 mysql 的连接?

    它在 mysql 中消耗资源。请检查 mysql 日志以获取线索。

    问候,

    【讨论】:

    • 我正在为我所做的每个更新/选择语句连接/断开连接,这是我应该做的,还是应该只在程序结束时断开连接?我认为这是因为我在很短的时间内被 conn/disc 太多次谢谢!
    • 如果我是你,我会在程序中使用一个连接/断开连接。在每个数据库操作(选择/插入等)之后检查错误。如果不成功,则尝试重新连接并执行相同的语句。
    • 再想一想:如果您不使用自动提交,那么您可能会因为大型事务而耗尽资源。
    • 谢谢,我已经改成单连接了,到现在还没有再遇到这个问题
    【解决方案4】:

    如何修复 MySQL 错误 10055 要解决此问题,您需要增加动态端口的数量。 运行以下命令将为您提供 50000 个端口以供动态使用。

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

    输入以下内容
    netsh int ipv4 set dynamicport tcp start=10000 num=50000
    按回车

    输入以下内容
    netsh int ipv4 set dynamicport udp start=10000 num=50000
    按回车

    输入以下内容
    netsh int ipv6 set dynamicport tcp start=10000 num=50000
    按回车

    输入以下内容
    netsh int ipv6 set dynamicport udp start=10000 num=50000
    按回车

    【讨论】:

    • here复制没有署名
    猜你喜欢
    • 2021-02-17
    • 2010-09-27
    • 2021-12-18
    • 2010-09-12
    • 2012-11-30
    • 1970-01-01
    • 2014-03-10
    • 2014-11-08
    • 2020-07-14
    相关资源
    最近更新 更多