我使用以下Perl脚本尝试连接到本地MySQL服务器,
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "mysql";
my $host = "localhost";
my $database = "test";
my $dsn = "DBI:$driver:database=$database,host=$host";
my $userid = "root";
my $password = "password";
my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;
my $sth = $dbh->prepare("select from_date,to_date from temp");
$sth->execute() or die $DBI::errstr;
print "Number of rows found :" + $sth->rows;
while (my @row = $sth->fetchrow_array()) {
my ($from_date, $to_date ) = @row;
print "From Date = $from_date, To Date = $to_date\n";
}
$sth->finish();
当我运行此脚本时,我每次都会收到以下错误,尽管我已授予此MySQL用户所有权限,
拒绝访问用户&root;' @' localhost' (使用密码:是)
我是Perl的新手,我想有些错误已经完成。请告诉我代码中的错误。
提前致谢!!
P.S。我在Windows机器上运行它,即使在我的Ubuntu机器上也遇到了同样的错误,尽管我在那里指定了socket的路径。
答案 0 :(得分:2)
我遇到过类似的问题。 我正在使用下面的连接字符串;
my $dbh = DBI->connect("DBI:mysql:database=db_name;host=db_server_ip", "db_user", "db_password", {'RaiseError' => 1});
密码中包含“@”符号,将双引号(“)替换为单引号(')为我解决。
my $dbh = DBI->connect("DBI:mysql:database=db_name;host=db_server_ip", "db_user", 'db_password, {'RaiseError' => 1});
答案 1 :(得分:0)
在Mysql中,用户名包括连接主机。
例如,同一个用户可以拥有两个不同的密码,具体取决于他们连接的位置。
示例:
root @ localhost与root@192.168.1.1不同的用户
尝试重置密码? 在mysql控制台中运行以下两个命令。 (将“明文密码”更改为您的密码)
为'root'设置密码@'%'= PASSWORD('cleartext password');
SET PASSWORD FOR'root'@'localhost'= PASSWORD('cleartext password');
这将允许两个root用户使用相同的密码