2

以下を使用して、ローカルホストからmysqlデータベースに接続しています

<?php
function testdb_connect ()
{
   $dbh = new PDO("mysql:host=localhost;dbname=test", "testuser", "testpass");
   return ($dbh);
}
?>

ec2-12-34-56-78.compute-1.amazonaws.comただし、次のコードを使用して、別のサーバーからこのデータベース (データベースが実行されている) に接続しようとしたとき

$dbh = new PDO("mysql:host=ec2-12-34-56-78.compute-1.amazonaws.com;dbname=test", "testuser", "testpass");

接続できません。

php pdoを使用してec2インスタンスのリモートデータベースに接続できますか?

認証パラメーター (秘密鍵など) を渡すにはどうすればよいですか?

4

2 に答える 2

3

高度なカスタマイズ (つまり、クラスター化された構成など) を必要とする非常にユニークなデータベースがない限り、EC2 に実装するよりも、データベースに RDS を使用することを検討する必要があります。EBS でバックアップされたボリューム (物理データ ファイルを永続化できるようにするために実行する必要があります) で実行すると、ディスク I/O が遅くなります。EBS-backed EC2 で実行していない場合、データは一時的なものであり、信頼できる物理ストレージ上にあるとは見なされません。これがあなたの設計にとって問題ない場合 (データベースに一時的な情報が必要なだけです)、おそらくさらに良いサービスが提供されますが、情報を Elasticache または何らかの形式のインメモリ キャッシュに入れるだけです。

RDS は MySQL を使用します (まあ、Oracle の使用を選択することもできます)。独自の MySQL サーバーにアクセスするのとまったく同じようにアクセスできます (同じ PHP 抽象化、同じ SQL、ほぼすべて同じです (ルート アクセスではなく、スーパー ユーザー アクセスの形式を取得します)。RDS はまた、簡単にマルチ az (高可用性、同期的に更新されるスタンバイ)、レプリケーション スレーブ、DB インスタンスのサイズ変更、およびデータ スナップショットの実装 (つまり、プッシュ ボタン) 構成。

どちらの場合でも (RDS または EC2 の場合)、EC2 または RDS セキュリティ グループが、アプリケーションをホストする EC2 インスタンス (または他のサーバー) からのアクセスを許可していることを確認する必要があります。EC2 のみの場合、サーバーを同じセキュリティ グループに配置し、そのグループにポート 3306 アクセスを提供するか、2 つのセキュリティ グループ (アプリ用と db 用) を作成することをお勧めします。db セキュリティ グループで、アプリ サーバーが属するセキュリティ グループにポート 3306 (または使用している任意のポート) を指定します。

RDS の場合、アプリ サーバー用の EC2 セキュリティ グループと RDS インスタンス用の DB セキュリティ グループが必要です)。RDS セキュリティ構成でアプリ サーバー セキュリティ グループへのアクセスを提供する必要があります。

于 2012-09-24T17:01:29.527 に答える
2

これが AWS でどのように機能するかの詳細はわかりませんが、最初に行うことは、マシン間で SSH トンネルを実行することです。

その場合、PHP/PDO は基本的に、ローカル データベースに接続していると見なします。私の経験では、リモートサーバーを見つけるためにDNSルックアップを行う必要がないため、接続の確立も高速になります...すべてのPHPページの読み込みがリモートDBに接続する必要があると考えると、非常に重要です.

アプリケーションがリモートデータベースに保存されたデータを管理する必要があり、それがチャンピオンのように機能する場合、私はこれをイントラネットで使用します。

SSH トンネルは完全に安定していますが、autosshというプログラムを使用して、 SSH トンネルがダウンしたときに再接続を試みます。

完全を期すために、autossh を起動して特定の SSH トンネルを確立および維持するために使用するコマンドを次に示します。ここに追加したのは、必要なオプションを理解するのに autossh のドキュメントがかなり混乱していることがわかったためです。

autossh -M 0 -f -L3307:127.0.0.1:3306 -p 22 -N -f username@xxx.xxx.xxx.xxx

これにより、Web サーバーのポート 3307 がリモート DB サーバーの 3306 に転送されます。したがって、PHP では 3307 に接続します。必要に応じて 3306 を選択できます。ローカルの MySQL とリモートがある場合に備えて、ローカル ポート 3307 を選択しました。-p スイッチは、リモート マシンで SSH が実行されているポートです。

このコマンドを/etc/rc.local(少なくとも CentOS では) に追加して、サーバーの起動時に SSH トンネルを確立できます。

お役に立てれば!

于 2012-09-24T17:33:39.580 に答える