🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

phpMyAdmin

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

1618閲覧

AWS RDSのphpmyadminに MACターミナルを使って接続したい

cambodia

総合スコア12

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

phpMyAdmin

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/01/13 09:05

#解決したいこと
AWSのRDSにあるphpMyAdminに MACのターミナルを使ってログインしたいです。

#発生している問題・エラー
MACターミナルを使って、AWSのEC2サーバーにはアクセスできました。
スクリーンショット 2021-01-13 14.20.56.png
しかし、その後、phpMyAdminにログインできません。

◾︎ ターミナルに入力した内容

[ec2-user@ip-(10-0-10-123)~]$ mysql -u admin -p 3306 -h aws-shingapore-web.cwqbsrhqairj.ap-southeast-1.rds.amazonaws.com -p

※上記の10-0-10-123は仮番号です

◾︎ 返されたエラーメッセージ

-bash: mysql: command not found

#問題の概況

昨年、phpとphpMyAdminを使ったサイトを作りました。
そのサイトを、AWSに詳しい知り合いにお願いして、AWSサーバーに置いて世界中の人から見てもらえるようにしました。しかし、そのサイトを公開して数日後に、アクセスできないようになりました。
その理由は、データベースへの大量のエラーリクエストでした。接続エラーの上限回数を超えたのが理由です。
エラーメッセージは以下の通りです

Host ‘********’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

※ *****は、ホスト名です


この問題を解決するためにネットで検索すると、
ターミナルを利用してAWSのRDSにあるphpMyAdminにログインして、
mysqladmin -h ホスト -u root -p flush-hosts
というSQLを入力する、とありました。
参考URL:https://norm-nois.com/blog/archives/3139

そしてそのためには、AWSのEC2で新たなインスタンスを立ち上げた後、
EC2からRDSに接続してmySQLを操作する、とありました。
参考URL:https://photo-tea.com/p/aws-ec2-to-rds-connection/

ですので、最終的な目的は、
AWSのRDSにあるphpMyAdminにログインして、
mysqladmin -h ホスト -u root -p flush-hosts というSQLを入力し、再びサイトにアクセスできるようにすることですが、そのために 
RDSに接続してmySQLを操作する ということができない状態です。

#考えられる原因
元々あったインスタンスA、と 新しく作ったインスタンスB、そして、RDSのDBインスタンス。
これら3つがうまく紐付けされていないのではないかと考えています。
それぞれの情報を以下に記します


◾︎ インスタンスAとインスタンスBの情報比較
イメージ説明


◾︎ RDSのDBインスタンスの情報
イメージ説明

◾︎ セキュリティグループの情報
イメージ説明

#自分で試したこと
AWSとターミナルの初心者ですので、書籍を読みながら試行錯誤やってみましたが、
お手上げ状態になりました。

何かヒントになるようなことでも結構ですので、ご教授賜りたく存じます。

どうぞよろしくお願いいたします。

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

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

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

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

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

CHERRY

2021/01/13 09:11

> -bash: mysql: command not found エラーメッセージは、コマンドが見つからないと言っていますが、Mac に mysql クライアントをインストールされていますか?
yu_1985

2021/01/13 09:13

具体的なIPやエンドポイントは隠したほうがよいです。
cambodia

2021/01/13 10:16

CHERRYさま ありがとうございます。 素人ですみません。Macのターミナルにmysqlクライアントをインストールしているか?ということでしょうか?インストールは特にしたことはないのですが、さくらレンタルサーバー上のphpMyAdminには接続できたので、同じ要領でAWSにも接続できるのかなと思いましたが、どうでしょうか?
cambodia

2021/01/13 10:17

yu_1985さま ご指摘ありがとうございます。 一応、オリジナルのものと少し変えて表示しておりました。
guest

回答2

0

ベストアンサー

-bash: mysql: command not foundですから、
新しく作ったEC2にmysqlコマンド(MySQLクライアント)をインストールする必要があります。

OSがCentOSやAmazonLinuxであれば
sudo yum install mysql
で必要なものはインストール出来るかと思います。


phpMyAdminをインターネットからアクセスできる状態にしておくと、
同じ問題が発生すると思われるので、適切なアクセス制限設定が出来るまではphpMyAdminを削除しておくことをお勧めします。
(EC2上で動くphpMyAdminとRDS上で動くMySQLについての区別が出来て無いように見受けられます。そのあたりを正確に認識しないととても危険です。
おそらくは、phpMyAdminの認証にMySQLユーザーを使った結果、不正なアクセスがそのままRDSへ接続を試行してロックされたのだろうと思います)

例えば、

  • localhostからのアクセスのみを許可してsshポートフォワード経由のみでphpMyAdminにアクセス出来るようにする
  • phpMyAdminは使わず、MySQL Workbench等のクライアントソフトをMacにインストールし、EC2へのSSHを経由して(SSHポートフォワードを使用して)RDSに接続する
  • 頑張ってコマンドラインでMySQLを操作できるようになる(操作する時はEC2にログインして、mysqlコマンドで操作する)
  • 適当なVPNサービスを使用して固定グローバルIPを取得して、そのIPからのみphpMyAdminにアクセス出来るようにする

等が考えられます。

追記

まず、MySQLにはサーバーとクライアントが存在します。
実際にデータが蓄積されるのはサーバーの方で、これはRDS上で動作しています。

クライアントは色々種類があるのですが、全てEC2上で動作します。

EC2上で動くMySQLクライアントがRDS上で動くMySQLサーバーに接続をしに行くという関係です。

現状は、
[最初に動いていたEC2]上で動くMySQLクライアント(phpMyAdmin)がRDS上で動くMySQLサーバーに接続をしに行く際に、(不正なアクセスと不適切なセキュリティ設定によって)何回も接続に失敗してしまった結果、RDS上で動くMySQLサーバーが[最初に動いていたEC2]からのアクセスを拒否している状態です。

これを解決するためには、MySQLサーバーにどうにかしてログインして、RDS上で動くMySQLサーバーに記録されてしまった拒否設定をクリアする必要があります。

[最初に動いていたEC2]はRDS上で動くMySQLサーバーに接続拒否されている状態なので、別のEC2を立てて、そこにMySQLクライアントをインストールしてそちらからログインし、拒否設定の削除を行うというのが、質問中の最初のリンク内にある
AWSのRDSを使っている場合
で提示されているSQL
FLUSH HOSTS
です。

[新しい方のEC2]にMySQLクライアントをインストールすることによって
mysql -u(ユーザー名) -p -h(RDSのエンドポイント)
というコマンドが実行できるようになり、このコマンドによってRDS上で動くMySQLサーバーにログイン出来ます。
ログイン出来たら、
FLUSH HOSTS;
で拒否設定を削除するという流れです。

投稿2021/01/13 09:33

編集2021/01/14 08:57
tanat

総合スコア18727

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

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

cambodia

2021/01/13 10:21

細かくご指摘いただきありがとうございます。 また、具体的な解決方法もお教えていただきありがとうございます! まだまだ未熟なので、ご説明頂いた内容をゆっくり噛み砕きながらやってみます!
cambodia

2021/01/14 08:32 編集

すみません、確認させてください。 AWSのEC2に新しく作ったインスタンスに、まだwebサーバーのApacheをインストールしていません。それも関係ありますでしょうか? それとも、インストールはmysqlクライアントのみでいいでしょうか? 今のところの理解としては、 インスタンスを新しく作ると、そのインスタンスの仮想サーバーが自動的に作られる。そのサーバーに、mysqlクライアントをインストールすることで、サーバー内でmysqlが動作するようになる。 この理解で合ってますでしょうか?
tanat

2021/01/14 09:00

まだMySQLサーバーとクライアントの関係が把握できていない様に思います。 回答に追記したので試してみてください。 ただ、最初の回答にも書いた通り、 phpMyAdminのセキュリティ設定を変更しないまま拒否設定を解除しても、またすぐに同じ状態になると思われます。 一旦落ち着いてMySQLの基本的なところを学習される方(`MySQL 入門`等で検索)が結果として近道になるかもしれません。
cambodia

2021/01/14 10:22

追記、ありがとうございます♪ 私でも分かるよう噛み砕いてご説明頂き感謝します! かなり理解できました。 ただ仰られた通り、同じ状態にならないようにするための施作が大事ですね。 候補をたくさん挙げて頂きましたので、その中の localhostからのアクセスのみを許可してsshポートフォワード経由のみでphpMyAdminにアクセス出来るようにする というのにトライしてみます。 これが一番やれそうなイメージが持てます。 もしくは、 適当なVPNサービスを使用して固定グローバルIPを取得して、そのIPからのみphpMyAdminにアクセス出来るようにする にトライしてみます!
cambodia

2021/01/14 10:24

また、今回の件で、Mysqlとかサーバーやネットワークについて何も知らなかったので、じっくり理解を深めるために学習します。
guest

0

PhpMyAdminというものについてそもそも誤解されているようですね。
やりたいことは「PhpMyAdminに入りたい」ではなくて「RDSのMySQLにログインしたい」ですね。
PhpMyAdminはあくまでMySQLのDBを視覚的に確認できるようにしたphp製のアプリであって、
それ自体はデータベースではありませんしRDSとは関係ありません。
RDSにあるのはあくまでデータベースです。

今回の問題はEC2上にMySQLのクライアントがインストールされていないことです。
EC2がどのOSかわかりませんが、Amazon Linux2であれば
sudo yum install mysql
でインストールできます(実際にインストールされるのはmariadbのクライアントですが、RDSにつなぐことだけが目的なら特に問題ありません)

また、今回はそもそも打つべきコマンドが間違っています。
mysqladmin flush-hostsと書いてあるようにmysqlではなくmysqladminですね。

投稿2021/01/13 09:21

yu_1985

総合スコア7588

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

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

cambodia

2021/01/13 10:23

はい。誤解しておりました。まだまだあやふやな理解でした。ご指摘大変感謝いたします! また、今回の問題についても、的確にバシッと言っていただけると大変助かります!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問