2017-12-14 6 views
0

나는 Laravel5.4 응용 프로그램에서 작업 중이며 자체 데이터베이스가 있습니다. 일부 비즈니스에서는 amazon 서버의 다른 원격 데이터베이스에 연결하여 일부 데이터를 읽고 일부 데이터를 삽입해야하지만 모든 시도가 실패합니다. 나는 시도 :아마존 서버의 원격 데이터베이스에 연결

.env.php :

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=db1 
DB_USERNAME=root 
DB_PASSWORD=root 

DB_EXT_CONNECTION=mysql 
DB_EXT_HOST=xx.xx.xx.xx 
DB_EXT_PORT=3306 
DB_EXT_DATABASE=db2 
DB_EXT_USERNAME=root 
DB_EXT_PASSWORD=root 

구성/database.php :

'mysql' => [ 
      'driver' => 'mysql', 
      'host' => env('DB_HOST', '127.0.0.1'), 
      'port' => env('DB_PORT', '3306'), 
      'database' => env('DB_DATABASE', 'forge'), 
      'username' => env('DB_USERNAME', 'forge'), 
      'password' => env('DB_PASSWORD', ''), 
      'unix_socket' => env('DB_SOCKET', ''), 
      'charset' => 'utf8mb4', 
      'collation' => 'utf8mb4_unicode_ci', 
      'prefix' => '', 
      'strict' => true, 
      'engine' => null, 
     ], 

    //External Database Credentials 
    'ext_mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_EXT_HOST', '127.0.0.1'), 
     'port' => env('DB_EXT_PORT', '3306'), 
     'database' => env('DB_EXT_DATABASE', 'forge'), 
     'username' => env('DB_EXT_USERNAME', 'forge'), 
     'password' => env('DB_EXT_PASSWORD', ''), 
     'unix_socket' => env('DB_EXT_SOCKET', ''), 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 

(가) 내 컨트롤러에서 시도 :

$users = DB::connection('ext_mysql')->table('users')->get(); 
return $users; 

하지만 브라우저에서의 연결은 오랫동안 마침내 준다. 'Connection time out'

아무도 도와 줄 수 있습니까?

+3

내가 물어 첫 번째 질문은, 당신은 예를 들어, MySQL 클라이언트를 사용하여 서버에 연결할 수 있습니다. 관리자, navicat, mysql 작업대? 원격 mysql 서버가 원격 연결을 허용하지 않을 가능성이 있습니다. –

+0

원격 MySQL DB와 같은 소리 때문에 IP가 연결되지 않을 수 있습니다. 외부 DB에서 원격 MySQL 액세스가 허용되는지 확인하십시오. –

+0

외부 DB에서 원격 MySQL 액세스가 허용되는지 어떻게 확인할 수 있습니까? –

답변

0

난 당신이 원격 시스템의 hostname 또는 IP 주소를 사용해야 에게 일부 데이터

을 읽을 아마존 서버에서 다른 원격 데이터베이스에 연결해야합니다.

나는 env 방법을 잘 모르는 것 같아요,하지만 난 생각, 당신은

'host' => env('DB_EXT_HOST', '127.0.0.1'), 

'host' => env('DB_EXT_HOST', 'xxx.xxx.xxx.xx'), 

'xxx.xxx.xxx.xx'에 원격 컴퓨터의 IP 주소가 될 것이다 변경해야합니다.

+0

네, 그랬습니다. 그 파일은 .env 파일에서 찾을 수 있습니다. 127.0.01에서 볼 수있는 것은 기본 IP이지만 .env에서 읽습니다. MySQL DB가 @Niraj의 주석으로 IP에 연결하지 못하게했을 수 있습니다. –

0

외부 데이터베이스를 .env 파일에 prefix를 DB_EXT_로 정의하고 config/database.php 파일에서 DB_SRD로 액세스하려고합니다.

변경하여 설정/database.php 파일

'ext_mysql' => [ 
    'driver' => 'mysql', 
    'host' => env('DB_EXT_HOST', '127.0.0.1'), 
    'port' => env('DB_EXT_PORT', '3306'), 
    'database' => env('DB_EXT_DATABASE', 'forge'), 
    'username' => env('DB_EXT_USERNAME', 'forge'), 
    'password' => env('DB_EXT_PASSWORD', ''), 
    'unix_socket' => env('DB_EXT_SOCKET', ''), 
    'charset' => 'utf8mb4', 
    'collation' => 'utf8mb4_unicode_ci', 
    'prefix' => '', 
    'strict' => true, 
    'engine' => null, 
] 

또한 원격 데이터베이스가 외부 IP 주소의 연결을 지원하는지 확인합니다. 데이터베이스가 다음 원격 시스템에있는 경우

+0

EXT를 사용해 주셔서 감사합니다. 제 질문을 업데이트했으며 전혀 작동하지 않습니다. 원격 데이터베이스가 외부 IP 주소로부터의 연결을 지원하는지 어떻게 확인할 수 있습니까? –

+0

어떤 원격 데이터베이스를 사용하고 있습니까? RDS입니까? –

+0

amazon의 기본 데이터베이스 설정입니다. –