質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • PHP

    21354questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    6183questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

別のサーバーのデータベースに接続したい

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 6,097

smnsmn

score 162

一回の処理で2つのDBに接続する処理を書いています。
一つは処理を実行しているサーバーと同じサーバーのMySQLで、

define('MYSQL_SERVER', 'localhost');
define('MYSQL_USERNAME', 'root');
define('MYSQL_PASSWORD', 'パスワード');
define('MYSQL_DATABASE', 'テータベース名');

$db = mysql_connect(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD);
$db_selected = mysql_select_db(MYSQL_DATABASE, $db);

このようにして接続しています。


もう一つ、この処理を実行しているモノとは別のサーバーにも接続します。こちらは、

$server = 'ここをどう指定すればよいか分からない';
$user = 'root';
$pass = 'パスワード';
$db_name = 'データベース名';

$db = mysql_connect($server, $user, $pass);
$db_selected = mysql_select_db($db_name, $db);

このように接続しようとしていますが、上手くいきません。
こちらに接続する前に、先に接続していたlocalhostの方はmysql_close($db);で接続を切っています。

$server = 'root@12.345.678.90';このように指定しますと、

PHP Warning:  mysql_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in〜〜〜line 000

と、$db = mysql_connect($server, $user, $pass);の行にエラーが出ます。

この二つのDBとの接続(接続してINSERTを行っています)を同じphp(hoge.php)内で行っております。
サーバー?ホスト?の指定が間違っているのか、別の部分が原因なのか、ご教授頂けませんでしょうか;;;

何卒よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+1

MySQLはデフォルトでは外部ホストからの接続を許可しないようになっています。
参考サイト
http://linuxserver.jp/%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89/db/mysql/%E5%A4%96%E9%83%A8%E6%8E%A5%E7%B6%9A%E8%A8%B1%E5%8F%AF%E8%A8%AD%E5%AE%9A

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/07 16:31 編集

    回答ありがとうございます。

    外部の接続先サーバー側(質問内だとroot@12.345.678.90)で
    mysql> grant all privileges on *.* to hoge@"111.111.111.111" identified by 'パスワード' with grant option;
    (hoge@111.111.111.111は実行サーバーのユーザ名@IPアドレス)
    を実行して、実行サーバーユーザーを追加しました。

    mysql> select user,host,password from mysql.user;
    で確認すると hoge@111.111.111.111が追加されてるのを確認できました。

    実行サーバー側(hoge@111.111.111.111)から
    mysql -h 12.345.678.90 -u hoge -p
    を実行してパスを叩きましたが、
    ERROR 2003 (HY000): Can't connect to MySQL server on '12.345.678.90' (113)
    となって接続できませんでした。

    どこか間違っておりますでしょうか?;;;

    キャンセル

  • 2016/03/07 16:36

    grant したあと、反映させるコマンドが
    ”FLUSH PRIVILEGES;” だったと思います。

    キャンセル

  • 2016/03/07 17:40

    FLUSH PRIVILEGES;
    は実行済みです。
    userテーブルにはすでにユーザーも追加反映されています。

    キャンセル

  • 2016/03/07 17:54

    あとは、3306番ポートを開放されているか?

    キャンセル

  • 2016/03/08 19:09

    ポートは開放していないのですが、
    iptablesに作成したユーザー名とホストを追加したところ、うまく行きました。
    記載してくださったサイトを参考に致しました。
    ありがとうございます!mm

    自分の行った作業を、自己解決にも記載させて頂きます。

    キャンセル

0

>$server = 'root@12.345.678.90';このように指定しますと、

$server = '12.345.678.90';
ではどうですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

参考URL
mysql_connect

通常は「hostname:port」または「ip_address:port」のように指定しますが、ポート番号はデフォルトですと省略可能という認識です。
しかし、WebサーバーとDBサーバーが物理的に離れている場合、アクセス権限、ファイアウォール、ポート番号などの確認が必要になりますので、インフラ担当者に問い合わせした方が手間を省けます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

質問者です。
terion様のアドバイスと、参考サイト様を元に私の行った方法を記載します。

サーバーA(接続元)から、サーバーBのDBに接続

※suでroot権限で実行またははsudoで実行して下さい。
あくまで私個人の方法です。セキュリティとか他のところいじっちゃったとか、そのへんは責任負いかねます。

①サーバーBのiptablesにサーバーAのIPアドレスを追加。

//iptablesの確認
$ iptables -L

//iptablesを編集してサーバーAのIPアドレスを記述する
$ vi /etc/sysconfig/iptables

実行するとファイルが開く。
-A INPUT -s xx.xxx.xx.xx -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -s xx.xxx.xx.xx -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -s ここにサーバーAのIP -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

このような記述が多分あると思います。(--dport 3306)←これが多分3306ポートの意味。
上記のように文をコピペしてIPの部分をサーバーAのIPに変更して、上書き保存。
これで多分3306ポートへの接続できるリストにサーバーAが追加されるイメージです。

//再起動させる
$ /etc/rc.d/init.d/iptables restart

②サーバーBのDBにユーザーの追加

//mysqlにログイン
$ mysql -u root -p

//キャッシュ?をクリアにして最新情報の状態にする
mysql> flush privileges;

//今登録されてるユーザーの確認
mysql> select user,host,password from mysql.user;

だいたいですがユーザー一覧が表示されます。
user  host    password
root  localhost    *********
既存のユーザーと被らないユーザ名で、サーバーA用のユーザーを追加します。

//ユーザーの追加
mysql> grant all privileges on *.* to user@"11.222.33.44" identified by 'パスワード' with grant option;

「user@"11.222.33.44"」のuser→任意のユーザー名、11.222.33.44→サーバーAのIPアドレス
「パスワード」に任意のパスワードを入力(忘れないように!)

//もう一回クリアにして反映させる
mysql> flush privileges;

//ユーザに登録されたか確認
mysql> select user,host,password from mysql.user;

今登録したユーザーが追加されていたらOK。

③最後に、サーバーAから接続テスト

//サーバーAから接続
$ mysql -h 00.000.000.000 -u user -p

00.000.000.000はサーバーBのIP。
userは先程設定したサーバーAのユーザー名

パスワードを聞かれるので、さっき②で登録したパスワードを叩いて

Welcome to the MySQL monitor.〜〜〜〜〜
と表示されたらOKです!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    21354questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    6183questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。