- PR -

MYSQLの外部からリモート接続の仕方について

1
投稿者投稿内容
Jiro
常連さん
会議室デビュー日: 2004/12/25
投稿数: 32
投稿日時: 2005-07-18 16:56
MYSQLで外部のサーバーからリモートで接続してデータ
を取り出したいのですが、うまく外部から接続でき
ません。

例えば、A(222.123.256.15)のサーバーに
PHPのプログラムがあって、Bのサーバー(256.254.123.456)に
Mysqlのデーターベースがあります。
MySQLはデフォルトではTCP-IP経由で接続することは
できないのでしょうか?


テスト用で作ったプログラムです。
<html>
<head><title></title></head>
<body>
<?php
$sv = "";
$dbname = "test";
$user = "root";
$pass ="";

$disp_enc = "SJIS";

function cnv_dbstring($string,$enc) {
$det_enc = mb_detect_encoding($string);
if($det_enc and mb_detect_encoding_enc != $enc) {
return mb_convert_encoding($string,$enc,$det_enc);
} else {
return $string;
}
}

$conn = mysql_connect($sv,$user,$pass) or die("接続エラー");
mysql_select_db($dbname) or die("接続エラー");

$sql = "SELECT * FROM test";
$res = mysql_query($sql,$conn) or die("データ抽出エラー");
echo "<table border=\"1\">";

while($row = mysql_fetch_array($res,MYSQL_ASSOC)) {
echo "<tr><td>".$row['id']."</td>";
$count_number = $row['count_number'];
}
echo $count_number;
echo "</table>";
mysql_close($conn);
?>
</body>
</html>

環境は
Feodra Core2
PHP4.1.3
Mysql 3.23.58

個人的にしたことなのですが、サーバーのグローバルIPアドレスを
指定をローカルから外部のIPアドレスに変えてみましたが
うまくいきませんでした。このほかに方法があるのでしょうか?
よろしくお願いします。
MAVERICK
会議室デビュー日: 2003/10/01
投稿数: 17
お住まい・勤務地: 東京都
投稿日時: 2005-07-19 09:31
MAVERICK と申します。

まず、リモートホストからポート 3306/TCP に接続できるかチェックしてください。
確か、デフォルトでは localhost 以外からは接続できないようになっているはずです。
コード:
shell> telnet server_host 3306


TELNET がハングしたり、接続拒否される場合はリモートホストから接続ができませんので、設定をチェックしてください。
Jiro
常連さん
会議室デビュー日: 2004/12/25
投稿数: 32
投稿日時: 2005-07-28 23:29
ありがとうございます。会社のことなので、なかなか
試す時間がなくて返事おくれました。

ということは3306番のポートを開ければデフォルトで接続で
きますでしょうか?

MySQLで外部から接続できる設定でもあるのでしょうか?

情けない質問ですいません。

ようはレンタルサーバーを外部で借りていて、会社ないで構築
したMySQLにアクセスができるか試したいと思っているの
ですが、何か良い手があればよろしくお願いします。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-07-29 01:53
こんばんは。

とりあえず、次の条件が必要です。

1. MySQLがTCPでも外部からの接続待ち受けをしていること。
  確認:netstat -tlpn 等(0.0.0.0:3306 〜 LISTEN xxxx/mysqld の表示があれば)
     ※netstat の -p オプションは root限定なので注意!!
  手段:設定オプションを色々いじれば…
  既定:デフォルトではTCPポート3306番でListenしているかと
  備考:TCPを使用しない場合は、UNIXドメインソケットでのローカル接続のみ

2. Netfilter/iptables で、接続制限をかけていないこと。
  確認:iptables -t テーブル -vnL 等 (テーブルは主に filter 他に nat,mangle)
  手段:iptablesコマンドで制限を無効化するなり、mysqlの通信を許可して下さい
  既定:インストール時のファイアウォール設定によりけり

3. mysqldの権限テーブルで、外部からの接続を許可すること。
  手段:mysqlユーザの追加方法GRANTの使用法
  原理:アクセス制御の仕組み

ちなみに、現行のマニュアルはこちらです。バージョン3ではありませんが、こちらでもそれなりに参考になると思います。

以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-07-29 02:26 ]
1

スキルアップ/キャリアアップ(JOB@IT)