あるサーバーにある Web サイトと別のサーバーにある別の Web サイトが必要ですが、php と mysql の両方を使用するためのデータベースは 1 つだけです。出来ますか?はいの場合、どのように?
6 に答える
はい。それが可能だ。通常、データベースを離れたサーバーに置くことはありません。高速の内部ネットワーク リンクを利用できるように、同じデータ センターに db サーバーを配置する必要があります。
Web サイトがホストweb1
にありweb2
、データベースが にdbhost1
ある場合は、ホスト名としてmysql に接続しweb1
ます。web2
dbhost1
みずい
$mysqli = new mysqli("dbhost1", "user", "pass");
PDO
$dbh = new PDO('mysql:dbname=dbname;host=dbhost1', "user", "pass");
従来の mysql 拡張機能
mysql_connect("dbhost1", "user", "pass");
注:データベースuser@web1
(ホスト上web1
) またはuser@web2
(ホスト上web2
) にアクセスできることを確認してください。
正しい設定があれば、リモート データベースに接続できます。
それができない場合は、両方のサーバーから呼び出すことができるサービス レイヤーを作成できます。
mysql データベースへの接続中に、両方のサーバーで同じデータベース接続資格情報を使用します。
はい、そうではありません。しかし、セキュリティとパフォーマンスの問題のために、私はそれをしません。
問題は、別のサーバーが LAN 経由で直接接続されているサーバーであるか、別のデータ センターにあるサーバーであるかを理解することです。サーバーが別のデータ センターにある場合、多くのトラフィックとパフォーマンスの問題が発生する可能性があります。
サーバーが直接接続されている場合、my.cnf を変更して次の行を変更できます。
bind-address 127.0.0.1
サーバーは外部から到達可能です。また、ユーザーに外部から接続するための十分な権限を与える必要があります。
はい、可能です。両方のサーバーから到達可能な mysql サーバーを使用する必要があります。両方のサーバーから同じホスト/ユーザー/パスで接続するだけです。
define("WEBDOMAIN", "94.145.22.15"); //some fake data
define("DEFDBNAME", "my_db");
define("DEFUSERNAME", "my_user");
define("DEFDBPWD", "my_pass");
mysql_connect( WEBDOMAIN, DEFUSERNAME, DEFDBPWD );
mysql_select_db( DEFDBNAME);
それで十分なはずです。ホスティング プロバイダーがサーバーから外部サーバーへの接続を許可していない場合 (ポートが閉じている場合もあります)、問題が発生する可能性があります。
セキュリティ上の理由から、ホスティング サーバーを承認していない mysql サーバーには接続できないことがよくあります。そのため、mysql では、ユーザーが localhost からだけでなく、他のホストからも接続できるようにする必要があります (十分な権限がある場合は、ユーザー権限を編集して phpMyAdmin から行うことができます)。