MySQL通过SSH隧道访问被拒绝

时间:2014-03-27 14:59:45

标签: mysql pdo ssh ssh-tunnel

我想使用SSH隧道连接到远程主机上的MySQL数据库。

我已使用命令设置隧道:

ssh user@host -L 3307:remote_mysql_hostname:3306

我可以使用以下设置成功连接HeidiSQL:

hostname: localhost
user: remote_mysql_user_login
password: remote_mysql_user_password
port: 3307

但是当我在PHP中使用PDO进行连接时,我得到:

  

用户访问被拒绝' remote_mysql_user_login' @' localhost' (使用密码:是)

我的PDO Dns是这样的:

mysql:type=Core_Db_Adapter_Pdo_Mysql;host=localhost;port=3307;dbname=db_name;

诀窍在哪里?


解决方案:

@symcbean 谢谢!

问题是(如@symcbean所示)在主机名中。

更改为' 127.0.0.1'解决问题。**

1 个答案:

答案 0 :(得分:2)

我借用了您的示例,并且能够使用相同的SSH隧道设置连接到远程主机。您是否可以共享您正在使用的PHP脚本以获取有关您的设置的更多信息?

您可以为要连接的远程数据库尝试“localhost”以外的主机名。

设置ssh隧道 - 我在/ etc / hosts中为my_db_host_name设置了一个条目,而不是使用localhost

ssh my_user @ my_remote_host -L 3307:my_db_host_name:3306

<?php

$dsn = 'mysql:host=my_db_host_name;dbname=my_db;port=3307';
$username = 'my_user';
$password = 'my_pass';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);

$result = $dbh->query("select * from my_table");

try {
    foreach($result as $row) {
        echo "column1: " . $row['column1'];
    }
} catch (PDOException $pde) {
    echo "PDO exception: $pde";
}

echo "done \n";

?>