无法使用Perl脚本从本地主机连接到MySQL

时间:2018-11-12 16:45:32

标签: mysql perl dbi

我在Web服务器上有一个perl脚本,该脚本使用以下代码连接到远程服务器上的数据库:

   my $dbusername='myname';
   my $dbpassword='mypassword';
   my $dbdatabasename='mydatabase';
   my $driver = "mysql"; 

   my $host='x.x.x.x'; # the actual ip of the mysql server
   my $port='1010'; # the port it listens on
   my $dsn = "DBI:$driver:database=$dbdatabasename;host=$host;port=$port";
   $dbh = DBI->connect($dsn,$dbusername,$dbpassword, {
           PrintError => 0, RaiseError => 1, });

一切正常。现在,我想将Perl脚本移至数据库所在的计算机上。所以我将上面的$ host ip替换为      我的$ host ='localhost';

我还在数据库上创建了一个与主机“ localhost”而不是“%”匹配的新用户(称为“ webuser”),并在新脚本中使用了该连接的用户名和密码。 (我可以使用该用户从MySQL Workbench连接到数据库)。

但是当我运行scrpt时,我总是得到    “拒绝用户'webuser'@'localhost'的访问”“

我还需要做什么?

它看起来确实像是一个权限问题(感谢ikegami),如果密码不正确,这是我希望得到的相同错误。但是我已经仔细检查过,可以使用完全相同的参数从命令行成功连接: mysql -u webuser -pMyPassword -h localhost -P 1010 MyDBname

DBI模块使用的mysql.exe程序和mysql驱动程序之间会有细微的差别吗?

稍后: 我发现的一个区别是,当我从命令行连接时,必须指定服务器正在侦听的端口号。如果不这样做,则会收到错误“无法在'localhost'上连接到MySQL Server”。

但是在Perl程序中,无论我使用哪个端口号,或者如果我根本不指定端口,我都会得到“拒绝用户'webuser'@'localhost'的访问”。 实际上,如果指定了不存在的数据库名称,我将得到相同的结果。

我想知道sql服务器是否拒绝访问,因为该请求来自Web服务器区域(public_html)中的程序。有可能吗?

0 个答案:

没有答案