web-dev-qa-db-ja.com

リモートサーバーからAmazon EC2のmysqlに接続する

ローカルマシンからEC2のdbに接続したいのですが、何もできず、すべてを試しました。このコマンドを使用してEC2に接続しています。

mysql -uUSERNAME -hEC2_IP -pPASSWORD

このエラーが生成されます

エラー2003(HY000):「IP」(110)でMySQLサーバーに接続できません

My.cnfを変更しました

skip networking
bind-address            = 0.0.0.0

それでもデータベースに接続できない

58
Aashish Katta

次のいずれかの理由が考えられます。

  1. マシンからAmazon EC2インスタンスへのリモートアクセスを許可するには、Amazonセキュリティグループにエントリを作成する必要があります。 :-これはあなたの質問から、あなたがすでに0.0.0.0でエントリを作成したように思われるので、誰もがマシンにアクセスできるようになっていると思います。
  2. MySQLは、リモートマシンからのユーザーの接続を許可していません。ただし、ルートIDのアクセスはローカルホストのみに制限されています。これは、リモートマシンからMySqlにアクセスしようとすると、正しいパスワードのrootユーザーIDが機能しないことを意味します。この問題を解決するには、rootユーザーまたは他のDBユーザーがリモートマシンからMySQLにアクセスできるようにする必要があります。リモートマシンからDBにアクセスするrootユーザーIDを許可することはお勧めしません。ワイルドカード文字%を使用して、リモートマシンを指定できます。
  3. マシンのローカルファイアウォールが有効になっていないか確認してください。有効になっている場合は、ポート3306が開いていることを確認してください。

次のリンクをご覧ください: MySQLデータベースサーバーへのリモートアクセスを有効にする方法は?

52
Sandip Dhummad

上記の応答で述べたように、AWSセキュリティグループなどに関連している可能性があります。しかし、ユーザーを作成し、リモートアクセス '%'を与えてもこのエラーが引き続き発生する場合は、mysqlの設定ファイルを確認してください。debianでは、次の場所にあります。

bind-address            = 127.0.0.1

次のように変更します。

bind-address            = 0.0.0.0

そしてmysqlを再起動します。

debian/ubuntuで:

/etc/init.d/mysql restart

これがお役に立てば幸いです。

84
mohamed elbou

更新:2017年2月

MySQLのリモートアクセス用の完了手順は次のとおりです(Amazon EC2にデプロイ):-

1. MySQLを受信ルールに追加します。

Ec2インスタンスのセキュリティグループに移動->インバウンドルールを編集->新しいルールを追加-> MySQL/AuroraとソースをAnywhereに選択します。

2. my.cnfにbind-address = 0.0.0.0を追加します

インスタンスコンソールで:

Sudo vi /etc/mysql/my.cnf

これにより、viエディターが開きます。
my.cnfファイルで、[mysqld]の後に新しい行を追加して、これを記述します。

bind-address = 0.0.0.0

:wq(enter)を入力してファイルを保存します

mySQLを再起動します。

Sudo /etc/init.d/mysqld restart

3.リモートユーザーを作成し、権限を付与します。

mySQLへのログイン:

mysql -u root -p mysql(この後にパスワードを入力してください)

次のコマンドを作成します。

CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword';

CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword';

GRANT ALL PRIVILEGES ON *.* to jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

EXIT;

その後、インスタンスのパブリックDNS/IPをMySQLホストアドレス、ユーザー名をjerry、パスワードをjerrypasswordとして入力すると、MySQL dBにリモートでアクセスできます。 (ポートはデフォルトで3306に設定されています)

40
JerryGoyal

ポート3306(MySQLのデフォルトポート)で着信リクエストを受け入れるようにEC2インスタンスに割り当てられた Amazon Security Group を設定していない可能性があります。

この場合、ボタンを数回クリックするだけで、セキュリティグループのポートを簡単に開くことができます。

1)AWSコンソールにログインし、「EC2」に移動します

2)[ネットワークとセキュリティ]の下の左側のメニューで[セキュリティグループ]に移動します。

3)問題のセキュリティグループを確認する

4)[受信]タブをクリックします

5)ドロップダウンリストから「MYSQL」を選択し、「ルールの追加」をクリックします

理由ではないかもしれませんが、行く価値はあります...

27
Tom Mac

この問題を追跡するのに役立つステップは、MySQLが実際に設定されているバインドアドレスを識別することです。 netstatでこれを行うことができます。

netstat -nat |grep :3306

これは、複数のmysql構成ファイルがあり、間違ったファイルを編集していたため、問題を解決するのに役立ちました。 Netstatは、mysqlがまだ間違った構成を使用していることを示しました。

ubuntu@myhost:~$  netstat -nat |grep :3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

だから私は私の設定を上書きしているかもしれない他のファイルの設定ディレクトリをgreppedして見つけました:

ubuntu@myhost:~$  Sudo grep -R bind /etc/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:bind-address         = 127.0.0.1
/etc/mysql/mysql.cnf:bind-address = 0.0.0.0
/etc/mysql/my.cnf:bind-address = 0.0.0.0

ど!これにより、調整した設定が間違った構成ファイルであることがわかりました。そのため、今回はRIGHTファイルを編集し、netstatで確認し、ビジネスに参加しました。

8
Bob Diego

Ubuntuの一部の構成では、このファイルでバインドアドレスを変更する必要があります。

/etc/mysql/mysql.conf.d/mysqld.cnf 
7
KC Kern

この質問には答えられているようですが、取得できるもう1つの一般的な問題は、DBユーザーが正しく構成されていないことです。これはmysqlの管理と権限の問題です。

  1. IPを使用してEC2_DBを起動10.55.142.100
  2. IP 10.55.142.144でEC2_webを起動しました
  3. EC2_DBとEC2_WEBは、DBポートを介してアクセスできる同じセキュリティグループにあります(3306)
  4. EC2_DBには、DBルートユーザー('root'@'localhost')がローカルにアクセスできるmysql DBがあります
  5. EC2_DB mysql DBにはリモートユーザー'my_user'@'%' IDENTIFIED BY PASSWORD 'password'があります
  6. EC2_WEBからmysqlへのbash呼び出しは失敗します:mysql -umy_user -p -h ip-10-55-142-100.ec2.internalは、明示的なIP、パブリックDNSなどへのホスト参照と同様です。

Mysql DBのユーザー権限が間違っているため、手順6は失敗します。これが必要です:

GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password'

%はどのリモートサーバーでも機能すると考えたいのですが、そうではありませんでした。

これがあなたを助けるかどうか私に知らせてください。

5
New Alexandria

変更/etc/mysql/my.cnf

bind-address            = 127.0.0.1 to 0.0.0.0

「%」Hostでユーザーを作成し、再起動します。

/etc/init.d/mysql restart

私のために働く! :)

4
Edwin Wachs

AWSマネジメントコンソールにログインします。 RDSに移動してから、dbインスタンスを選択し、「セキュリティグループ」に移動します。セキュリティグループにCIDR/IPを追加すると、問題が修正されました。

2
RC_02
  • 管理ユーザーを使用してMYSQLを開始します
    • mysql -u admin-user -p(プロンプトでパスワードを入力してください)
  • 新しいユーザーを作成します:
    • CREATE USER 'newuser' @ '%' IDENTIFIED BY 'password'; (%-> anyhost)
  • 権限の付与:
    • Db_name。*にSELECT、DELETE、INSERT、UPDATEを付与します 'TO'newuser' @ '%';
    • フラッシュ特権;

EC2インスタンスを実行している場合、MYSQL/Aururaを使用してセキュリティグループにインバウンドルールを追加することを忘れないでください。

これらの手順が機能しない場合は、/ etc/mysql/my.cnfファイルを確認し、bind_addressパラメーターを次のように編集します。

bind_address = 0.0.0.0

1
Rifaideen

これに対する解決策は3つのステップです。

  1. MySQL my.ini/my.cnfファイル内で、バインドアドレスを変更して、すべてのホスト(0.0.0.0)からの接続を受け入れます。

  2. AWSコンソール内-ec2-特定のセキュリティグループがmysqlポート(デフォルトは3306)を開き、すべてのホスト(0.0.0.0)からの接続を受け入れます。

  3. Windowsファイアウォール内で、例外にmysqlポート(デフォルトは3306)を追加します。

そして、これはリモート接続の受け入れを開始します。

1
dhalsumit

私は以前のすべての回答(および同様の質問に対する回答)を成功せずに行ったので、最終的には私にとってうまくいったものがあります。重要なステップは、mysqlサーバーの特権をローカルユーザー(サーバーの)に明示的に付与することでしたが、ローカルIPを追加しました(myuser@*.*.*.*)。完全なステップバイステップのソリューションは次のとおりです。

  1. サーバー(つまりEC2インスタンス)のbind_address/etc/mysql/my.cnf行をコメント化します。 bind_address=0.0.0.0も機能すると思いますが、他の人が述べたように、それは必要ありません。

  2. ポート3306およびソースとしてMy IPまたはAnywhereのいずれかを使用して、MYSQLのルールを(他の人も言及しているように)EC2インスタンスのセキュリティグループに追加します。すべての手順を実行すると、両方とも正常に機能します。

  3. 1つの特定のデータベースmyuserに対する制限された特権を持つ新しいユーザーmydbを作成します(基本的にこの Amazonチュートリアル の指示に従います)。

    $EC2Prompt> mysql -u root -p
    [...omitted output...]
    mysql>  CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password';
    mysql>  GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';`
    
  4. ここに重要なステップがあります。リモート接続(ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server)を試みたときにローカルアドレスが拒否されました:

    mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23';
    mysql> FLUSH PRIVILEGES;`
    

    '*.*.*.23'をローカルIPアドレスに置き換えてください)

  5. 適切な測定のために、シェルに対してmysqlを終了し、msyqlサーバーを再起動しました。

    $EC2Prompt> Sudo service mysql restart

  6. これらの手順の後、私は自分のコンピューターから次のように喜んで接続することができました。

    $localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p

    myinstancename.amazonaws.comをEC2インスタンスのパブリックアドレスに置き換えます)

0
adelval

私はこれが古い投稿であることを知っていますが...

私はこの問題を経験しており、私の問題は実際にはEC2インスタンスではないことを確認しました。 MySQLクライアントドライバーソフトウェアのバグのようです。私はまだ徹底的な調査を行っていませんが、MySQL WorkbenchをEC2インスタンスにインストールするまで行きましたが、ITも不安定です-断続的に接続に失敗します(エラーは「接続がキャンセルされました」)。 このリンク は、EC2ではなく、スタックの下位にある可能性のあるバグを示唆しています。

もちろん、私は徹底的な研究を行っていませんし、私の投稿は実際には外れているかもしれませんが、とにかく注目および/または探索する価値があります、私見。

0
Siphiwe Gwebu

インスタンスEC2 UbuntuのMysqlのデフォルトIPは、127.0.0.1です。これを変更する場合は、ここで既に示した回答に従うだけです。

0
Renato Lazaro

'myuser' @ 'localhost'のようなユーザーを作成している間、ユーザーはlocalhostからのみ接続できるように制限されます。リモートアクセス専用のユーザーを作成し、MySQLサーバーに接続するリモートクライアントのIPアドレスを使用します。すべてのリモートホストからの接続を許可するリスクを負うことができる場合(通常は動的IPアドレスを使用する場合)、「myuser」@「%」を使用できます。私はこれを行い、またbind_addressを/etc/mysql/mysql.cnf(Ubuntu)から削除し、今では問題なく接続しています。

mysql> select Host,user from mysql.user;
+-----------+-----------+
| Host      | user      |
+-----------+-----------+
| %         | myuser    |
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
3 rows in set (0.00 sec)
0
Zeeshan