警告:MYSQL_OPT_RECONNECT 已弃用,并将在未来版本中删除

Jav*_*ces 20 mysql perl dbi

正如我在这里看到的,从 MySQL 8.0.34 开始,自动重新连接功能已被弃用。我有很多 Perl 脚本连接到 MySQL 数据库,例如:

my $dbh = DBI->connect( "DBI:mysql:database=$db_name;host=$db_host",
                         $db_user, $db_pass, {'RaiseError' => 1,
                         mysql_enable_utf8 => 1} );
Run Code Online (Sandbox Code Playgroud)

现在发出警告:

警告:MYSQL_OPT_RECONNECT 已弃用,并将在未来版本中删除。

我尝试将 Perl 代码更改为:

my $dbh = DBI->connect( "DBI:mysql:database=$js_db_name;host=$js_db_host",
                         $js_db_user, $js_db_pass, {'RaiseError' => 1,
                         mysql_enable_utf8 => 1, mysql_auto_reconnect => 0} );
Run Code Online (Sandbox Code Playgroud)

但警告仍然存在。我已尝试按照此处的建议添加reconnect=false[client]配置文件的部分。也没有成功。/etc/my.cnf

我什至尝试更改 MySQL 的 Perl DBI 驱动程序,其代码如下 ( mysql.pm):

    if ($this && ($ENV{MOD_PERL} || $ENV{GATEWAY_INTERFACE})) {
        $this->{mysql_auto_reconnect} = 1;
    }
Run Code Online (Sandbox Code Playgroud)

避免将mysql_auto_reconnect属性设置为1. 但这也行不通。可能还有额外的代码,但如果可能的话我会避免更改标准库。

我尝试更新 DBI 和 DBD::mysql,但它们似乎是最新的:

$ cpanm DBI
DBI is up to date. (1.643)
$ cpanm DBD::mysql
DBD::mysql is up to date. (4.050)
Run Code Online (Sandbox Code Playgroud)

任何打开连接的 Perl 脚本都会向 stderr 抛出消息。

DBD::mysql 的行为记录如下:

该属性决定如果连接丢失,DBD::mysql是否会自动重新连接到mysql。该功能默认关闭;但是,如果设置了 GATEWAY_INTERFACE 或 MOD_PERL 环境变量,DBD::mysql 将打开 mysql_auto_reconnect。如果使用“锁表”,则不建议将 mysql_auto_reconnect 设置为 on,因为如果 DBD::mysql 重新连接到 mysql,所有表锁都将丢失。当 AutoCommit 关闭时该属性被忽略,并且当 AutoCommit 关闭时,DBD::mysql 不会自动重新连接到服务器。还可以通过将 $dbh 的 mysql_auto_reconnect 属性传递到 DBI-connect> 的 %attr 散列中来设置它的默认值。请注意,如果您使用的模块或框架为您执行重新连接(例如修复模式下的 DBIx::Connector),则该值必须设置为 0。

但我希望能够通过设置来绕过它mysql_auto_reconnect => 0。这是必须显式设置的,因为 MySQL 现在默认设置为不重新连接:

$ cpanm DBI
DBI is up to date. (1.643)
$ cpanm DBD::mysql
DBD::mysql is up to date. (4.050)
Run Code Online (Sandbox Code Playgroud)

有什么想法可以禁用重新连接功能并消除警告吗?

phi*_*lip 12

DBD::mysql 总是将 MYSQL_OPT_RECONNECT 设置为 false,您的代码无法更改它。将其设置为任何值(包括 false)都会引发错误。

另请参阅:https ://github.com/perl5-dbi/DBD-mysql/issues/354