ローカルマシンからEC2のdbに接続したいのですが、何もできず、すべてを試しました。このコマンドを使用してEC2に接続しています。
mysql -uUSERNAME -hEC2_IP -pPASSWORD
このエラーが生成されます
エラー2003(HY000):「IP」(110)でMySQLサーバーに接続できません
My.cnfを変更しました
skip networking
bind-address = 0.0.0.0
それでもデータベースに接続できない
次のいずれかの理由が考えられます。
次のリンクをご覧ください: MySQLデータベースサーバーへのリモートアクセスを有効にする方法は?
上記の応答で述べたように、AWSセキュリティグループなどに関連している可能性があります。しかし、ユーザーを作成し、リモートアクセス '%'を与えてもこのエラーが引き続き発生する場合は、mysqlの設定ファイルを確認してください。debianでは、次の場所にあります。
bind-address = 127.0.0.1
次のように変更します。
bind-address = 0.0.0.0
そしてmysqlを再起動します。
debian/ubuntuで:
/etc/init.d/mysql restart
これがお役に立てば幸いです。
MySQLのリモートアクセス用の完了手順は次のとおりです(Amazon EC2にデプロイ):-
Ec2インスタンスのセキュリティグループに移動->インバウンドルールを編集->新しいルールを追加-> MySQL/Aurora
とソースをAnywhere
に選択します。
インスタンスコンソールで:
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
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に設定されています)
ポート3306(MySQLのデフォルトポート)で着信リクエストを受け入れるようにEC2インスタンスに割り当てられた Amazon Security Group を設定していない可能性があります。
この場合、ボタンを数回クリックするだけで、セキュリティグループのポートを簡単に開くことができます。
1)AWSコンソールにログインし、「EC2」に移動します
2)[ネットワークとセキュリティ]の下の左側のメニューで[セキュリティグループ]に移動します。
3)問題のセキュリティグループを確認する
4)[受信]タブをクリックします
5)ドロップダウンリストから「MYSQL」を選択し、「ルールの追加」をクリックします
理由ではないかもしれませんが、行く価値はあります...
この問題を追跡するのに役立つステップは、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で確認し、ビジネスに参加しました。
Ubuntuの一部の構成では、このファイルでバインドアドレスを変更する必要があります。
/etc/mysql/mysql.conf.d/mysqld.cnf
この質問には答えられているようですが、取得できるもう1つの一般的な問題は、DBユーザーが正しく構成されていないことです。これはmysqlの管理と権限の問題です。
10.55.142.100
10.55.142.144
でEC2_webを起動しました'root'@'localhost'
)がローカルにアクセスできるmysql DBがあります'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
があります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'
%
はどのリモートサーバーでも機能すると考えたいのですが、そうではありませんでした。
これがあなたを助けるかどうか私に知らせてください。
変更/etc/mysql/my.cnf
:
bind-address = 127.0.0.1 to 0.0.0.0
「%」Host
でユーザーを作成し、再起動します。
/etc/init.d/mysql restart
私のために働く! :)
AWSマネジメントコンソールにログインします。 RDSに移動してから、dbインスタンスを選択し、「セキュリティグループ」に移動します。セキュリティグループにCIDR/IPを追加すると、問題が修正されました。
EC2インスタンスを実行している場合、MYSQL/Aururaを使用してセキュリティグループにインバウンドルールを追加することを忘れないでください。
これらの手順が機能しない場合は、/ etc/mysql/my.cnfファイルを確認し、bind_addressパラメーターを次のように編集します。
bind_address = 0.0.0.0
これに対する解決策は3つのステップです。
MySQL my.ini/my.cnfファイル内で、バインドアドレスを変更して、すべてのホスト(0.0.0.0)からの接続を受け入れます。
AWSコンソール内-ec2-特定のセキュリティグループがmysqlポート(デフォルトは3306)を開き、すべてのホスト(0.0.0.0)からの接続を受け入れます。
Windowsファイアウォール内で、例外にmysqlポート(デフォルトは3306)を追加します。
そして、これはリモート接続の受け入れを開始します。
私は以前のすべての回答(および同様の質問に対する回答)を成功せずに行ったので、最終的には私にとってうまくいったものがあります。重要なステップは、mysqlサーバーの特権をローカルユーザー(サーバーの)に明示的に付与することでしたが、ローカルIPを追加しました(myuser@*.*.*.*
)。完全なステップバイステップのソリューションは次のとおりです。
サーバー(つまりEC2インスタンス)のbind_address
の/etc/mysql/my.cnf
行をコメント化します。 bind_address=0.0.0.0
も機能すると思いますが、他の人が述べたように、それは必要ありません。
ポート3306およびソースとしてMy IP
またはAnywhere
のいずれかを使用して、MYSQLのルールを(他の人も言及しているように)EC2インスタンスのセキュリティグループに追加します。すべての手順を実行すると、両方とも正常に機能します。
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';`
ここに重要なステップがあります。リモート接続(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アドレスに置き換えてください)
適切な測定のために、シェルに対してmysqlを終了し、msyqlサーバーを再起動しました。
$EC2Prompt> Sudo service mysql restart
これらの手順の後、私は自分のコンピューターから次のように喜んで接続することができました。
$localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p
(myinstancename.amazonaws.com
をEC2インスタンスのパブリックアドレスに置き換えます)
私はこれが古い投稿であることを知っていますが...
私はこの問題を経験しており、私の問題は実際にはEC2インスタンスではないことを確認しました。 MySQLクライアントドライバーソフトウェアのバグのようです。私はまだ徹底的な調査を行っていませんが、MySQL WorkbenchをEC2インスタンスにインストールするまで行きましたが、ITも不安定です-断続的に接続に失敗します(エラーは「接続がキャンセルされました」)。 このリンク は、EC2ではなく、スタックの下位にある可能性のあるバグを示唆しています。
もちろん、私は徹底的な研究を行っていませんし、私の投稿は実際には外れているかもしれませんが、とにかく注目および/または探索する価値があります、私見。
インスタンスEC2 UbuntuのMysqlのデフォルトIPは、127.0.0.1
です。これを変更する場合は、ここで既に示した回答に従うだけです。
'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)