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

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

新規登録して質問してみよう
ただいま回答率
85.37%
さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

2回答

4407閲覧

phpMyAdminから別サーバのMySQLに接続できない

tesopgmh

総合スコア146

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2021/06/18 04:21

編集2021/06/18 10:04

phpMyAdminから別サーバのMySQLに接続したいのですができません
原因がわかる方お教えいただけますでしょうか

[phpMyAdminが置いてあるクライアントサーバ]
IP:AA.AA.AA.AA
CentOS Linux release 7.5.1804 (Core)

[mySQLが動いているホストサーバ]
IP:BB.BB.BB.BB
CentOS Linux release 7.6.1810 (Core)
mysql Ver 14.14 Distrib 5.6.44, for Linux (x86_64) using EditLine wrapper
mysql権限ではroot AA.AA.AA.AAからのアクセスを許可

■1.phpMyAdminが置いてあるサーバに外部サーバの接続を増やしたいため
「config.inc.php」に以下の通り足しました

/* * */ $i++; /* Authentication type */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['verbose'] = 'BB.BB.BB.BB(外部サーバ)'; $cfg['Servers'][$i]['host'] = 'BB.BB.BB.BB'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'XXXXXX'; $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;

■2.追加は成功し、「サーバの選択:」が出現
「BB.BB.BB.BB(外部サーバ)」を選択しログインを試みるも

「#2003 MySQL サーバにログインできません」

というエラー

■3.セキュリティやパスワードを疑う
SSHにて「AA.AA.AA.AA」に接続
ますは念のためグローバルIPを確認

curl inet-ip.info

結果:AA.AA.AA.AA

mysql -h BB.BB.BB.BB -u root -p パスワード入力

結果:問題なくmysqlに接続できる

SSHでは問題なく接続できるので、
セキュリティや権限、パスワード間違い等ホスト側の問題ではなく
クライアント側(phpmyadmin)の問題のようです

$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['connect_type'] = 'socket';

等も全組み合わせパターン試してみましたが、
エラー文言は変わりますが接続できませんでした

phpMyAdmin - エラー #2003 - Can't connect to MySQL server on 'BB.BB.BB.BB' (13) サーバが応答しません。

解決方法ご存じの方がおりましたら教えてくださいませ

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

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

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

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

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

m.ts10806

2021/06/18 04:27

さくらのレンタルサーバは本件とどう関係しますか
m.ts10806

2021/06/18 04:28

また、SSHとDBサーバはポート同じじゃないので、「SSHもいけたからDBもいけるはず」は通りません。
tesopgmh

2021/06/18 06:18 編集

m.ts10806 様 >また、SSHとDBサーバはポート同じじゃないので、「SSHもいけたからDBもいけるはず」は通りません。 「SSHもいけたからDBもいけるはず」ってどこに書いてありましたか? 正しくは「セキュリティや権限、パスワード間違い等ホスト側の問題ではなく」です コマンドの具体例を見ればわかると思うのですが SSHからMYSQLクライアントを使っています 一般的には、ポートを指定しない限りMYSQLのデフォルトポートが使われます SSHでMYSQLクライアントから接続できた場合は 「セキュリティや権限、パスワード間違い等ホスト側の問題ではなく」 セキュリティ、権限、パスワード間違いではない蓋然性が高くなると思います この推察は間違っていますでしょうか? 間違っている場合は、もう少し掘り下げて情報を頂けますと幸いです。
m.ts10806

2021/06/18 07:12

>SSHでは問題なく接続できるので SSHログインしてDBに繋ぐのと、直接DBに繋ぎに行くのは全く別の話です。 それより、タグにあるさくらのレンタルサーバと本件の関連性を先に教えて下さい。
tesopgmh

2021/06/18 08:35

m.ts10806様 >SSHログインしてDBに繋ぐのと、直接DBに繋ぎに行くのは全く別の話です。 すみません、私の理解力不足で仰っていることの意味が全く分からないです 「SSHログインしてDBに繋ぐのと直接DBに繋ぎに行くのが同じである」と 私がどこで主張しているのでしょうか? 主張していない点に関して議論を持ちかけられているので困惑しています 「SSHログインしてDBに繋ぐ」の具体例を示していただけますでしょうか 情報が限定的で一体なんのことを仰っているのかが分からないです 私側が想定しているのは MySQLクライアント、正式名称は「mysql-community-client」 コマンドは mysql -h BB.BB.BB.BB -u root -p パスワード入力 特にポートを指定しなければmysqlのデフォルトポートで接続します これでつながれば「ホスト側のセキュリティ、権限、パスワード間違いではない蓋然性が高くなる」 この推察のなにが間違っているのでしょうか?間違っている点を具体的に指摘していただければ幸いです。 また、「直接DBに繋ぎに行く」の具体例を示していただけますでしょうか こちらも頂いている情報だけでは私の能力ではうまくくみ取ることができませんでした phpmyadminで接続することが「直接DBに繋ぎに行く」なのでしょうか??
m.ts10806

2021/06/18 08:50

ひとまず先に、タグにあるさくらのレンタルサーバと本件の関連性を先に教えて下さい。
tesopgmh

2021/06/18 09:32

m.ts10806様 ホストサーバにさくらVPSを使っております どうぞよろしくお願い致します
m.ts10806

2021/06/18 09:53

それだと「レンタルサーバ」ではないように思います。専用サーバなので。 タグ変更しておいてください。 https://teratail.com/tags/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS レンタルサーバであればDBへの外部からの直接アクセスは不可なので最初から確認していたのです。
m.ts10806

2021/06/18 09:54

いずれにしても、MySQLのポート開放は必須だと思います。つまり、phpMyAdminの問題ではなくサーバの設定の問題。 ※VPS契約してないので外部からの直接アクセスが可能かどうか私は確かめられませんが
m.ts10806

2021/06/18 09:55

直接アクセス=DBが設置されているサーバを介さず直にDBのホスト、ポート指定でアクセスすること
tesopgmh

2021/06/18 10:04

m.ts10806 ご指摘ありがとうございます、タグの修正完了しました
guest

回答2

0

通常は指定しなければデフォルトのポートで繋がる気がしますが、
$cfg['Servers'][$i]['port'] = '3306';(結構古いバージョンにしか存在しないオプション)
もしくは
$cfg['Servers'][$i]['host'] = 'MySQL側のIP:3306';

を明示的に指定するとどうなりますかね?

また、phpinfo()でmysqliが使えることを確認してみてください。
(使えない状態であればインストールしてください。)

あとは
MySQL Server 8.0からデフォルトの認証方式が変更。MySQLiやPDOではまだ扱えないため要注意。
あたりもありそう(後述のログを確認すればこの辺の切り分けも出来ます)

これで解決しない場合は、もう少し切り分けが必要かなと思います。

ログの確認と切り分け

phpMyAdminのエラー文言だけでは問題の切り分けに限界があるので、まずは以下のような流れでPHPの問題なのか、phpMyAdminの問題なのか切り分けてみてください

まずはphp.iniでエラーログを残すように設定して、エラーログを保存するように設定した上で、

  1. 単純なDB接続のみを行う&エラーを全て出力するPHPプログラム(mysqliで接続)を作成して、CLIから実行してMySQLに接続させてみる

→接続出来たらphpMyAdminの設定の問題であることが確定→ApacheとPHPのエラーログから問題の詳細を把握、分からなかったら次に進む
→接続出来なかったらPHPそのものの設定の問題の可能性が高いので、PHPのエラーログから問題を調査
2. phpMyAdminのサーバにMySQLをインストールしてMySQLユーザーxxxx@127.0.0.1を作成して 127.0.0.1:3306(localhostでは無く127.0.0.1)相手で接続出来るか確認してみる
→接続出来たら、正しくホストとポートを指定しさえすれば接続出来るはずなので、接続出来ている設定ファイルの127.0.0.1部分だけMySQLサーバのIPに変更してチャレンジ
→接続出来ない場合はphpMyAdminが正しくインストール出来ていないとかバージョンが使っているPHPとあっていないとかそういう問題の可能性もあるので(その辺はエラーログで出るはずですが)、過去のバージョンを試すなどしてみる

それでも解決しない場合はMySQL側ログとパケットを確認

それでも原因が判明しない場合は

  1. MySQL側のサーバでMySQLの認証が行われているログがあるか確認

→ログがあったらそこを切り口に問題を調査
2. 1が無い場合、tcpdumpなどでパケットキャプチャして、インバウンドがあるか確認
→無い場合はphpMyAdmin側サーバかネットワークの問題であることが確定(質問中の検証でネットワークの問題である可能性は低いので、phpMyAdmin側問題であることが確定)
3. phpMyAdmin側のサーバでtcpudumpして、MySQLのホスト:3306で通信しに行っている形跡があるか確認

と言う感じで、問題発生源を絞っていってみてください。

投稿2021/06/18 16:47

編集2021/06/18 16:55
tanat

総合スコア18716

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

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

tesopgmh

2021/06/21 14:16

ありがとうございます!お教えいただいた方法で一つ一つ検証していきたいと思います!
guest

0

やりたいことは下記が近いのではと。
さくらVPSに設置したデータベースに外部からアクセスして、さくらのレンタルサーバ ライトプランでWordPressを使う

下記をやっていないのでは。

DB用ポート3306を開放

firewall-cmd --zone=public --add-port=3306/tcp --permanent

DBに対して外部からの直接アクセスを許可するにはポートの開放が必要不可欠です。(DBじゃなくても。SSHもポート開放されてるからアクセスできるはずです)

投稿2021/06/18 09:57

m.ts10806

総合スコア80875

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

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

tesopgmh

2021/06/18 10:23

ありがとうございます ポート開放を明示的に行いましたが接続できませんでした 念のためホスト側のfirewalldを停止もしましたが接続できませんでした systemctl stop firewalld.service そもそもクライアント側SSHの「mysql-community-client」で接続が出来ているので ホスト側の3306ポート開放は関係ない(できている)と思われます [クライアント側] mysql -h BB.BB.BB.BB -u root -p パスワード入力 [ホスト側] ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 ::ffff:BB.BB.BB.BB:mysql ::ffff:AA.AA.AA.AA:63945 以上のとおり3306ポートで接続の確立は成功しています
m.ts10806

2021/06/18 10:50

サーバ再起動してますよね? sshはポート22(デフォルトなら)のはずですし、 そこで入ってしまえばサーバ内なのでDB接続はできます。 今やろうとしているのはあくまでDBへの直接接続なので ポート開放は必要不可欠です。 ただ、私自身VPS所持者でなく、自身で立てた仮想環境でしかやったことがないので、VPS特化した内容ならさくらサービス側に問い合わせた方が良いかもしれません(専用サーバとなると基本自己責任なので良い返事は得られないかもしれませんが、可不可くらいは分かると思います)
tesopgmh

2021/06/18 11:01

ああなるほど、かみ合わない理由が分かりました m.ts10806さま、恐らく認識に齟齬があります SSH接続しているのはクライアントサーバであってホストではありません クライアントーホスト間はポート3306です SSH | 22 | [クライアントAサーバ]---3306--->[mysqlホストBサーバ]
tesopgmh

2021/06/18 11:04

あとfirewalldの設定変更にサーバのrebootは必要ありません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問