0

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

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)

你能给一些提示吗?

4

1 回答 1

0

DBI CPAN 文档页面上,我找到了 for 的两个替代$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";

这就像一个魅力。

于 2013-03-12T10:01:49.847 回答