みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ローカル以外のMySQLをphpMyAdminで

CentOS6.xのhttpdにphpMyAdminをセットアップし、別マシンにおいてあるMySQLに接続しようとしています。
外部マシンにtcpで接続するため、内部ソケットは使用しないと考えておりますが、アクセスしますと、なぜか#2002 Can't connect to local MySQL server ...というエラーメッセージが出ます。
お心あたりがあれば、ご教授ください。

ちなみに、別マシン上(CentOS5.x)で同様にphpmyadmin-2.11.11.3-2を稼動させておりますが、こちらは問題なく稼動しております。
要は、現在稼動しているphpmyadmin2をDBを含めphpMyAdmin3にマイグレーションしたいと考えているわけです。
(DBは現行稼動のものをバックアップして別マシンに再構築しています)

諸元値(関連あると思われるもの抜粋)
OS=CentOS6.3
phpMyAdmin-3.5.2-1(EPELからyum)
php-5.3.3-14(CentOS BASEよりyum)
php-mysql-5.3.3(同上)
mysql-5.1.61-4(同上)
mysql-libs-5.1.61-4(同上)

mysqlクライアントでは問題なくアクセスが可能です。
※アクセスしたときのエビデンスは以下
# mysql -u root -h 10.9.1.7 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 74
Server version: 5.1.61 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

config.inc.phpには以下のように設定してあります。
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '10.9.1.7';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
※ちなみにphpmyadmin2では、hostとextensionが異なるのみ

/etc/httpd/conf.d/phpMyAdmin.confの内容は以下
Alias /mysql /usr/share/phpMyAdmin
<Directory /mysql>
Order deny,allow
Deny from all
Allow from all
</Directory>
※現在はテスト中なのでInetから切断されたネットワーク環境においてあります

/etc/my.conf
[client]
socket=/var/lib/mysql/mysql.sock
port=3306
host=10.9.1.7
user=mysql
--

この状態で、httpdを起動し、phpmyadminのフォルダをアクセスすると、userとpassword入力画面まで行きます。
そこで、先にmysqlクライアントで接続可能であったユーザとパスワードを指定すると、冒頭のエラーメッセージが表示されるという具合です。

ちなみに、phppgadminもセットアップしておりますが、こちらは良好に動作しております。

よろしくお願いします。

投稿日時 - 2012-08-20 13:36:52

QNo.7653697

困ってます

質問者が選んだベストアンサー

CentOS5.xが現に稼動しており、CentOS6.xにマイグレーションしようとしているのですね。
CentOS5.xのphpMyAdminのインストール方法について特に明示はないようですが・・・
CentOS6.xをyumでインストールしているとの記載がありますので、同様にしてyumでインストールしたと推察します。
質問には、config.inc.phpの内容は明記されていますが、格納位置は明示されていません。

phpMyAdmin2では、config読み込みインスタンスは、
new PMA_Config('./config.inc.php')
と、ハードコーディングしています。
これに対してphpMyAdmin-3.5.2では、間接指定となっています。
new PMA_Config(CONFIG_FILE);
このCONFIG_FILEはどこで定義されているかと言うと、
libraries/vendor_config.php:define('CONFIG_DIR', '/etc/phpMyAdmin/');
libraries/vendor_config.php:define('CONFIG_FILE', CONFIG_DIR . 'config.inc.php');
という具合になっています。

従いまして、/usr/shere...ではなく
/etc/phpMyAdmin/config.inc.php
の内容をご確認ください。


ちなみに
phppgadminは当初から
/etc/phpPgAdmin
においてあるので気が付かなかったのではないですか?

投稿日時 - 2012-08-24 17:57:25

お礼

回答ありがとうございます。まさにご指摘の通りです。
rpm -qliv でリソース類を確認すべきでした。
/etc/phpMyadin/config.inc.phpはrpmデフォルトのままであり、host='localhost'となっていたままだったので、質問内容のエラーが出ていたわけです。
/usr/shere/phpMyAdmin/config.inc.phpを/etc/phpMyadin/config.inc.phpコピーし、無事想定通りの動作になったことを確認いたしました。
コピーして動作を確認しましたが、単純に
$cfg['Servers'][$i]['host'] = '10.9.1.7';
の部分のみの変更でも想定通りの動作になっていることをあわせてご報告しておきます。

投稿日時 - 2012-08-24 19:05:48

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

こんにちは。

私の環境でも試してみました。
確かにphpMyAdmin3.xだと外部サーバーに接続できませんでした。
(2.xだとすんなり接続できました。)


色々手直しして接続できるようになりましたので、手順を記載します。

config.php

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = '10.9.1.7';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';


私の場合ここで「#2000」エラーが発生。
my.cnfの「old_passwords=1」を削除し、MySQLを再起動

次に「#1045」エラーが発生。
該当のMySQLユーザーを削除し、再度作成。

これで外部のDBに接続できるようになりました。



ただ、f_userさんは「#2002 Can't connect to local MySQL server」のエラーが発生しているということなので・・・
CentOS6.xのサーバーのMySQLは接続可能でしょうか?

投稿日時 - 2012-08-22 15:37:32

補足

phpMyAdminが動いているhttpdサーバのipは、202.xxx.yyy.zzzです。
外部とは、ルータ用としてたてたサーバでPPPoE UnNumberedで接続しています。
現在は、Inetと切り離し、マシン単体で擬似Inetネットワーク環境を構築して接続テストをしています。
(擬似外部サーバはPPPoEサーバが稼動している)
この擬似外部サーバにFireFoxを載せて、http://202.xxx.yyy.zzz/mysql と打鍵してphpMyAdmin画面を表示させています。

DMZのセグメントは10.9.1.0/16で、ここにPostFIXやLDAPやらが、それぞれ別サーバでおいてあります。
MySQLのサーバには、PostgreSQLが同居しており、OSレベルでのFWは通り抜けるようにセットアップしてあります。
(設定の詳細は割愛)
phpMyAdminが載っているhttpdサーバからMySQL稼動サーバへの接続確認は、phpMyAdminの稼動サーバにmysqlクライアント(サーバではない)をyumで載っけて、mysqlコマンドにて接続確認をしております。
※上記の# mysql -u root -h 10.9.1.7 -p 以下のところです

つまり、mysqlで接続確認できているのと、既に稼動しているphpMyAdmin2の設定をほぼそのまま踏襲した設定になっているため、なぜphpMyAdmin3で接続できないのかが謎でした。
どうみても、localhostにアクセスしているわけではないので、ソケットでつなげに行こうとして「内部サーバは動いていません」というエラーメッセージが出るのが腑に落ちないのです。
そりゃそうです。localhost,127.0.0.1にはmysqldなんて動いていないですから。
そのために、tcp接続、10.9.1.7というように書いているのですから。

投稿日時 - 2012-08-22 17:05:35

お礼

回答ありがとうございます。
別回答者のお礼欄に記載の通り、epelリポジトリにおいてあるphpMyAdmin3のrpmは、phpMyAdmin2とちがい、config.inc.phpを/etc/phpMyAdminに入れる仕様となっていたのを確認しなかったのが原因でした。
ちなみに、kaz33が実施した場合エラーになったとご報告がありますが、私がインストールしたrpmではhostを変更しただけで、エラーなしに想定通りの動作をいたしました。あわせてご報告しておきます。

投稿日時 - 2012-08-24 19:09:35

ANo.2

接続先のサーバーのポート3306は開けましたか?
デフォルトは閉じていると思いますので、開けていないのでしたらポートを開けてください。

投稿日時 - 2012-08-21 19:06:22

補足

不明瞭な表現で申し訳ないです。
WEBサーバは直接Inetからアクセス可、DBサーバはDMZにいるとイメージしていただければと。
WEBサーバにmysqlクライアントがおり、クライアント単体で操作すると問題なくDBに対して読み書きが行えております。
※上記の# mysql -u root -h 10.9.1.7 -p 以下のところです

つまり、phpMyAdmin3が入っているWEBサーバからアクセスターゲットとなるMySQLが稼動しているDBサーバに対して、ネットワーク的、FW的、さらにはGRANT的にも問題なく接続できているとお考えください。
なので、yumで入れたPHPライブラリかphpMyAdmin3本体がおかしいのかな、と思っているしだいです。

ちなみに、まったく別なサーバ(CentOS5.x)にphpMyAdmin2を入れておりますが、向け先を上記DBサーバにしてアクセスするとうまく表示してくれています。
要は、ネットワーク構成は同じで、CentOS5.xをCentOS6.3に、phpMyAdmin2をphpAdmin3にマイグレーションしようと考えているわけです。

投稿日時 - 2012-08-21 21:18:13

お礼

とりあえず
「回答ありがとうございます」
と書いておきます。
私の説明不足が悪かったということで。
webサーバからsqlサーバにアクセスしようとしていて、webサーバにインストールしたmysqlクライアントから、mysqlサーバには問題なくアクセス可能、DB更新可能と説明したつもりだったのですが。
(これを以ってしてphpライブラリかphpMyAdmin3がおかしいと切り分けたしだい)
もう少し日本語力を磨いておきます。

投稿日時 - 2012-08-21 21:23:38

ANo.1

状況がよくわからないのですが
mysqlをインストールしてある外部サーバーにhttpdとphpMyAdminをインストール
するという選択肢はないのですか?

また、mysql外部、httpdとphpMyAdmin内部だとして、mysqldに接続できるポートは
確保されていますか?
さらにmysqlデータベースのhostやuserテーブルできちんとアクセス制限を
外してありますか?

投稿日時 - 2012-08-20 14:04:10

補足

不明瞭な表現で申し訳ないです。
WEBサーバは直接Inetからアクセス可、DBサーバはDMZにいるとイメージしていただければと。
WEBサーバにmysqlクライアントがおり、クライアント単体で操作すると問題なくDBに対して読み書きが行えております。
※上記の# mysql -u root -h 10.9.1.7 -p 以下のところです

また、まったく同様なネットワーク構成で、現状としてphpMyAdmin2が動いておりますので、phpMyAdmin3本体かWEBサーバに入れたphpのライブラリがおかしいと考えておりますが・・・

よく目にするのは
「tcp接続にして、localhostではなくIPを直接指定する」
です。
別サーバに立てたMySQLで成功したよ!というページにはまだお目にかかっていません。

投稿日時 - 2012-08-20 18:15:08

お礼

とりあえず
「回答ありがとうございます」
と書いておきます。
私の説明不足が悪かったということで。
一発で解決に至る回答を期待しているわけではないですが、状況が分からないまま、回答してほしくなかったです。
そのために、構成やcinfigをさらしているわけですから。

投稿日時 - 2012-08-20 20:05:59

あなたにオススメの質問