【问题标题】:Remote db connection from another remote ip perl来自另一个远程 ip perl 的远程数据库连接
【发布时间】:2019-01-02 04:03:42
【问题描述】:

我正在尝试连接一台安装了 MySQL 的远程服务器,但它正在使用 localhost 安装mySQL的远程服务器:131.116.220.228 需要连接db的远程服务器:131.116.220.220 ('ov046hanpgate01.ddc.teliasonera.net')

use DBI;
print "Testing 1\n";

$DSN="DATABASE=MySQL80;port=3306;host=131.116.220.228";
print "Testing 2\n";
my $dbh = DBI->connect("dbi:mysql:$DSN", "ShrutiTest", "Shruti@92", {PrintError => 0})
or die "Couldn't connect to database: " . DBI->errstr;
print "Testing 3\n";

$dbh->disconnect;

错误:无法连接到数据库:主机 'ov046hanpgate01.ddc.teliasonera.net' 不允许在 D:\Integrations\OWF\Scripts\test27july.pl 第 6 行连接到此 MySQL 服务器。

【问题讨论】:

  • 您需要检查您的权限。 MySQL 对远程主机具有严格的权限,因此请确保您有一个与@ 之后的主机名匹配的用户。 root@localhost != root@%

标签: mysql perl remote-server


【解决方案1】:

看起来您需要允许用户 ShrutiTest 从您运行脚本的 ip 进行连接,即。 131.116.220.220

任何管理员都可以在 MySQL 服务器上完成:

GRANT ALL PRIVILEGES ON *.* TO 'ShrutiTest'@'131.116.220.220'

【讨论】:

  • 从ip访问?
  • SELECT * from information_schema.user_privileges where grantee like "'ShrutiTest'%" group bygrantee 运行此检查
  • 它返回了 1 行,响应是肯定的
【解决方案2】:

这种语法"DBI:mysql:database=$db;host=$host;port=$port" 在 perl 脚本中对我有用,可以从 Unix 服务器连接到远程 MySQL 数据库。

【讨论】:

    【解决方案3】:

    解决了同样的问题。使用的代码是:

    #!/usr/bin/perl -w
    
    use DBI;
    
    ## mysql user database name
    $db ="Buffering";
    ## mysql database user name
    $user = "ShrutiBuffer";
    
    ## mysql database password
    $pass = "Shruti1234";
    
    ## user hostname : This should be "localhost" but it can be diffrent too
    $host="131.116.220.228";
    $port="3306";
    ## SQL query
    $query = "select * from buffering.insert_data";
    
    my $dbh = DBI->connect("DBI:mysql:database=$db;host=$host;port=$port",$user, $pass);
    
    $sqlQuery  = $dbh->prepare($query)
    or die "Can't prepare $query: $dbh->errstr\n";
    
    $sqlQuery->execute
    or die "can't execute the query: $sqlQuery->errstr";
    
    print "values are:: ";
    while (@row= $sqlQuery->fetchrow_array()) {
     print join(", ", @row), "\n";
    
    }
    
    $sqlQuery->finish;
    exit(0);
    

    【讨论】:

    • 所以你通过连接到一个完全不同的数据库来修复它?这真的是一个修复吗?为了使这个答案对其他人有用,您确实需要解释您是如何找到解决方案的以及该解决方案是什么。只是在这里转储一些代码并没有真正的帮助。
    猜你喜欢
    • 2014-12-03
    • 2012-04-07
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2016-08-05
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多