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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

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

PHP

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

Q&A

解決済

4回答

17317閲覧

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

smnsmn

総合スコア175

MySQL

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

PHP

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

2グッド

1クリップ

投稿2016/03/07 06:15

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

PHP

1define('MYSQL_SERVER', 'localhost'); 2define('MYSQL_USERNAME', 'root'); 3define('MYSQL_PASSWORD', 'パスワード'); 4define('MYSQL_DATABASE', 'テータベース名'); 5 6$db = mysql_connect(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD); 7$db_selected = mysql_select_db(MYSQL_DATABASE, $db); 8```このようにして接続しています。 9 10 11もう一つ、この処理を実行しているモノとは別のサーバーにも接続します。こちらは、 12```PHP 13$server = 'ここをどう指定すればよいか分からない'; 14$user = 'root'; 15$pass = 'パスワード'; 16$db_name = 'データベース名'; 17 18$db = mysql_connect($server, $user, $pass); 19$db_selected = mysql_select_db($db_name, $db); 20 21```このように接続しようとしていますが、上手くいきません。 22こちらに接続する前に、先に接続していたlocalhostの方は```mysql_close($db);```で接続を切っています。 23 24```$server = 'root@12.345.678.90';```このように指定しますと、 25 26**PHP Warning: mysql_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in〜〜〜line 000** 27 28と、```$db = mysql_connect($server, $user, $pass);```の行にエラーが出ます。 29 30この二つのDBとの接続(接続してINSERTを行っています)を同じphp(hoge.php)内で行っております。 31サーバー?ホスト?の指定が間違っているのか、別の部分が原因なのか、ご教授頂けませんでしょうか;;; 32 33何卒よろしくお願い致します。
masashitonomura👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

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 06:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2016/03/07 07:32 編集

回答ありがとうございます。 外部の接続先サーバー側(質問内だと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 07:36

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

2016/03/07 08:40

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

退会済みユーザー

2016/03/07 08:54

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

2016/03/08 10:09

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

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です!

投稿2016/03/08 12:31

編集2016/09/03 08:27
smnsmn

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考URL
mysql_connect

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

投稿2016/03/07 08:08

JinwonKim

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2016/03/07 06:42

HiroshiWatanabe

総合スコア2160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問