Perl编辑:据我所知,这个问题的根本原因是安装了正确的模块,但是加载了错误的mysql.so
文件。
my $dsn = "DBI:mysql:"
. "database=$db;"
. "host=$dbhost;"
. "mysql_ssl=$dbssl;"
. "mysql_skip_secure_auth=1;";
我最近试图升级我们的DBD::mysql版本,但一直遇到DBI connect('database=mydb;host=myhost','myuser',...) failed: Connection using old (pre-4.1.1)
错误。
经过几个小时的调试,并确定不更新mysql表的密码散列方法的正确选项在整个系统中是不可能的,我发现使用DBD::Mysql 4.027可以将"mysql_skip_secure_auth“声明为dsn的一部分。
然而,这似乎不起作用。
如果我运行mysql -h $myhost -u $myuser -p --skip-secure-auth
,我可以毫无意外地进行连接,但是尝试使用DBI/DBD::mysql进行连接时,我总是会遇到上面的错误,就好像该指令被忽略一样。
我也尝试过在设置了相同选项的情况下使用mysql_read_default_file
,以及在DSN中简单地使用mysql_skip_secure_auth
。这些东西的任何一个组合都不起作用。
我是不是遗漏了什么?
编辑:
跟踪输出(编辑以删除敏感信息):
imp_dbh->mysql_dr_connect: host = |{host}|, port = 0, uid = {user}, pwd = {pwd}
imp_dbh->mysql_dr_connect: Skipping secure auth
imp_dbh->bind_type_guessing: 0
imp_dbh->use_server_side_prepare: 0
imp_dbh->mysql_dr_connect: client_flags = 2
imp_dbh->mysql_dr_connect: <- --> do_error
Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled) error 2049 recorded: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)
my $versions = DBI->installed_versions;
foreach (keys %$versions) {
print "\n$_: " . %$versions->{$_};
}
DBD::SQLite: 1.26
DBD::ExampleP: 12.014310
DBD::Sponge: 12.010002
DBD::Gofer: 0.015057
DBD::DBM: 0.06
DBD::mysql: 4.027
DBI: 1.618
https://stackoverflow.com/questions/22702546
复制相似问题