2014-03-27 76 views
2

我想使用SSH隧道連接到遠程主機上的MySQL數據庫。MySQL通過SSH隧道訪問被拒絕

我已經設置了命令隧道:

ssh [email protected] -L 3307:remote_mysql_hostname:3306 

我可以全成連接使用HeidiSQL此設置:

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

但是當我使用PDO在PHP連接時,我得到:

拒絕訪問用戶remote_mysql_user_login'@ 'localhost' 的(使用密碼:YES)

我PDO是dns某事像這樣:

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

哪裏招?


解決方案:

@symcbean的感謝!

問題是(如@symcbean所示)在主機名中。

更改爲「127.0.0.1」解決這個問題。**

+1

嘗試使用127.0.0.1。當mysql看到'localhost'時,它會嘗試通過文件系統套接字(更快和更可靠)而不是網絡套接字進行連接 – symcbean

回答

2

我從你的例子借用,並能連接到使用相同的SSH隧道連接遠程主機。你能分享你正在使用的PHP腳本來獲得更多關於你的設置的信息嗎?

您可以爲您要連接的遠程數據庫嘗試「localhost」以外的主機名。

設置SSH隧道 - 我安裝在/ etc/hosts中的my_db_host_name的條目,而不是使用本地主機

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"; 

?>