外部のデータベース(PostgreSQL)に接続する必要が出てきたので、その備忘録です。
外部DB(PostgreSQL)に接続する手順は、以下の4つです。
データベースを持つ側(接続をされる側)のサーバー設定
- listen_addressesの修正
- データベース(PostgreSQL)のPortを開放
- 接続を許可するIPの追記
- Iptablesの修正
listen_addressesの修正
listen_addressesの修正は、postgresql.conf を修正します。
postgresql.confはおそらく /var/lib/pgsql/data/postgresql.conf あたりにあるので、vimで修正していきます。
listen_addressesはPosqgreSQLのサーバのインターフェースの指定。
デフォルトでは、listen_addresses = ‘localhost’ になっていてローカルからの接続しか受け付けていない。ネットワーク越しの接続を可能にするには以下のように修正する。
listen_addresses = ‘*’
もしくは
listen_addresses = ‘localhost,xxx.xxx.xxx.xxx(DBを持つサーバーのIP)’
Portを開放
Portの修正もpostgresql.conf から行います。listen_addresses =のそばに、#port=5432のような記述があるので、シャープを外します。
接続を許可するIPを指定
IPを指定するには、pg_hba.confを修正します。
pg_hba.confはおそらく /usr/local/pgsql/data/pg_hba.conf にあります。
DBをへの接続を特定のユーザーにパスワード認証のみで許可する場合以下の1行を、pg_hba.confの最後のところに追記します。
host DB名 ユーザー名 接続してくるIPアドレス/24 md5
ここまで終わったら、Postgresを再起動( service postgresql restart)します。
Iptablesの修正
sysconfigディレクトリにある、Iptablesを修正します。多分/etc/sysconfig/iptables あたりにあります。
vimで開いて、以下の2行を追加します。もし、A RH-Firewall-1-INPUT -j REJECT –~~~のように、REJECTの行があったら、それよりも上に入れておく。
-A INPUT -p tcp –dport 5342 -j ACCEPT
-A INPUT -p tcp –sport 5342 -j ACCEPT
これが終われば、iptablesを再起動(service iptables restart)して完了です。
外部から接続テスト
あとは接続をする側のサーバー側で、host、dbname、port、user、passwordを入れて接続確認をします。
下記の内容をphpファイルに記載して、ブラウザから確認します。
接続成功と出れば完了です。
<html>
<head><title>PHP TEST</title></head>
<body>
<?php
$conn = "host=接続するサーバーIP dbname=データベース名 port=port番号 user=ユーザー名 password=パスワード";
$link = pg_connect($conn);
if (!$link) {
die('接続失敗です。'.pg_last_error());
}
echo('接続に成功しました。<br>');
// PostgreSQLに対する処理
$close_flag = pg_close($link);
if ($close_flag){
echo('切断に成功しました。<br>');
}
?>
</body>
</html>
コメント