正如我所看到的here,从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} );
他们现在发出警告:
警告: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} );
但是警告仍然存在。我已经尝试将reconnect=false
添加到配置文件的[client]
部分的/etc/my.cnf
,建议here。也没有成功。
我甚至尝试过更改MySQL的Perl DBI驱动程序,它的代码如下(mysql.pm
):
if ($this && ($ENV{MOD_PERL} || $ENV{GATEWAY_INTERFACE})) {
$this->{mysql_auto_reconnect} = 1;
}
为了避免将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)
正在执行的任何打开连接的Perl脚本都会将消息抛给stderr。
DBD::mysql的行为记录如下:
此属性决定DBD::mysql是否会在连接丢失时自动重新连接到mysql。此功能默认为off;但是,如果设置了GATEWAY_INTERFACE或MOD_PERL环境变量,DBD::mysql将打开mysql_auto_reconnect。如果使用“lock tables”,则不建议将mysql_auto_reconnect设置为on,因为如果DBD::mysql重新连接到mysql,则所有表锁都将丢失。当AutoCommit关闭时忽略此属性,当AutoCommit关闭时,DBD::mysql不会自动重新连接到服务器。也可以设置$的mysql_auto_reconnect属性的默认值。注意,如果您使用的是为您执行重新连接的模块或框架(例如,修复模式下的DBIx::Connector),则此值必须设置为0。
但是我希望能够通过设置mysql_auto_reconnect => 0
来绕过它。这是必须显式设置的,因为MySQL现在默认设置为无重新连接:
$ mysql --help | egrep "^reconnect"
reconnect FALSE
有什么办法可以禁用重新连接功能并摆脱警告吗?
2条答案
按热度按时间jljoyd4f1#
DBD::mysql总是将MYSQL_OPT_RESIDECT设置为false,您的代码无法更改此设置。将其设置为任何值,包括false,都会发出错误。
标签:https://github.com/perl5-dbi/DBD-mysql/issues/354
x6yk4ghg2#
以下为我修复了Ubuntu 20.04.6 LTS(Focal Fossa)上的问题:
(as执行部分和其他人的评论中建议的)