使用Perl DBD-mysql连接到远程MySQL服务器时访问被拒绝错误

时间:2013-03-12 08:47:46

标签: mysql perl dbi

我尝试使用Perl DBD-mysql模块连接到远程MySQL服务器。客户端在Windows下,所以在连接Perl之前,我使用Windos cmd行进行了一些测试:

mysql -h xx.xx.xx.xx -u root -p database -P 3306

它返回ERROR 1045 (28000): Access denied for user 'root'@'my-pc-name'。我在互联网上做了一些研究,发现在服务器端运行grant all privileges on *.* to root@"%" identified by "password"可以解决这个问题。然后我成功连接到服务器。

但是,使用Perl DBD-mysql模块连接时仍存在此类访问问题。这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use DBI;

my $dbh = DBI->connect('DBI:mysql:database@xx.xx.xx.xx', 'root', 'password'
                   ) || die "Could not connect to database: $DBI::errstr";

据报道:

DBI connect('database@xx.xx.xx.xx','root',...) failed: Access denied for user 'root'@'localhost' (using password: YES)

请你提一些提示吗?

1 个答案:

答案 0 :(得分:0)

the DBI CPAN doc page上,我为$data_source找到了DBI->connect的两种替代方案。与我的第一次尝试相反,更详细的可以成功连接到MySQL服务器。它说:

Examples of $data_source values are:

  dbi:DriverName:database_name
  dbi:DriverName:database_name@hostname:port
  dbi:DriverName:database=database_name;host=hostname;port=port

虽然第二个似乎不适合我,但我转向第三个,即

my $dbh = DBI->connect('dbi:mysql:dbname=database;host=xx.xx.xx.xx','root', 'password'
                   ) || die "Could not connect to database: $DBI::errstr";

就像魅力一样。