2014-03-27 4 views
2

SSH 터널을 사용하여 원격 호스트의 MySQL DB에 연결하려고합니다. 내가 연결하는 PHP의 PDO를 사용하지만, 내가 얻을SSH 터널 액세스 거부를 통한 MySQL

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

: HeidiSQL이 설정을 사용하여 연결

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

나는 성공적인 수 있습니다

나는 명령을 사용하여 터널을 설정 한 :

:

액세스 사용자 remote_mysql_user_login '@'localhost를 '거부 (YES 암호를 사용하여)

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

트릭은 다음과 같습니다

내 PDO DNS는이 같은 STH입니까?


솔루션 :

@symcbean 감사합니다!

문제점은 (@symcbean에서 제안한대로) hostname에 있습니다. '127.0.0.1'로 변경

이 문제를 해결. **

+1

는 127.0.0.1을 사용하려고합니다. mysql이 'localhost'를 보았을 때, 네트워크 소켓 대신에 파일 시스템 소켓을 통해 (더 빠르고 더 알기 쉬운) 연결을 시도한다. – symcbean

답변

2

나는 당신의 예에서 빌려와 같은 SSH 터널 설정을 사용하여 원격 호스트에 연결 할 수 있었다. 설치에 대한 더 많은 정보를 얻기 위해 사용하고있는 PHP 스크립트를 공유 할 수 있습니까?

연결하려는 원격 데이터베이스에 대해 'localhost'이외의 호스트 이름을 시도 할 수 있습니다.

설정 SSH 터널 - I 설치 localhost 대신

ssh를 my_user @ my_remote_host -L 3307 사용 my_db_host_name에 대한/etc/hosts에 항목 : 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"; 

?>