web-dev-qa-db-ja.com

リモート接続Mysql Ubuntu

どういうわけか、私は自分のMySQLサーバにリモートで接続することができませんでした。私はすべてを試したが、まだエラーが出ている。

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using           password: YES)

今、走ってみた

 `GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

そしてまだ何もない!何が悪いの?

編集:my.cnfはバインドIPをコメントアウトした。

MySQLをlocalhost以外のものに公開するには、次の行が必要です。

mysqlバージョン5.6以下の場合

/etc/mysql/my.cnfでコメント解除され、コンピュータのIPアドレスに割り当てられ、ループバックは行われません

mysqlバージョン5.7以降の場合

/etc/mysql/mysql.conf.d/mysqld.cnfでコメント解除され、コンピュータのIPアドレスに割り当てられ、ループバックは行われません

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

IPを指定したくない場合はbind-address = 0.0.0.0を追加してください。

その後、新しいmy.cnfエントリを使用してMySQLを停止して再起動します。実行したら端末に行き、次のコマンドを入力して下さい。

lsof -i -P | grep :3306

それはあなたの実際のIPアドレスのxxxの中にこのようなものが戻ってくるはずです。

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

上記のステートメントが正しく戻ったら、リモートユーザーを受け入れることができます。ただし、リモートユーザーが正しい権限で接続するには、そのユーザーをlocalhostと '%'の両方に作成する必要があります。

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

それから、

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

そして最後に、

FLUSH PRIVILEGES; 
EXIT;

上記と同じユーザを作成していない場合、ローカルにログオンしたときに基本のlocalhost特権を継承し、アクセスに問題がある可能性があります。 myuserが持つアクセスを制限したい場合は、GRANTステートメントの構文 HERE を読む必要があります。それでも問題が解決しない場合は、追加のエラーを投稿してください。適切な行とmy.cnfを出力します。

注:lsofが戻ってこない場合や見つからない場合は、Linuxディストリビューションに基づいてインストール HERE できます。物事をうまく機能させるためにlsofを必要としませんが、物事が期待通りに機能していない場合は非常に便利です。

324
apesa

Apesaの素晴らしい投稿にいくつかのポイントを追加してください。

1)mysqlサーバーが待機しているIPアドレスを確認するには、以下のコマンドを使用します。

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2)何らかの理由で変更がすぐに有効にならない場合は、FLUSH PRIVILEGESを使用して権限付与テーブルを強制的にロードします。

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

3)mysqlサーバーマシンでnetfilterファイアウォールが有効になっている場合(Sudo ufw enable)、リモートアクセス用にポート3306を開くために次の手順を実行します。

Sudo ufw allow 3306

を使用してステータスを確認

Sudo ufw status

4)リモート接続が確立されると、クライアントまたはサーバーマシンでコマンドを使用して確認できます。

netstat -an | grep 3306
netstat -an | grep -i established
34
Jonathan L

MySQLはlocalhostのみをリッスンします。リモートアクセスを有効にしたい場合は、my.cnfファイルにいくつかの変更を加える必要があります。

Sudo nano /etc/mysql/my.cnf

Bind-addressとskip-external-lockingの行をコメントアウトする必要があります。

#bind-address = 127.0.0.1
# skip-external-locking

これらの変更を加えた後、mysqlサービスを再起動する必要があります。

Sudo service mysql restart
7
Vinh Lee

Windowsでテストする場合は、ポート3306を開くことを忘れないでください。

1
marw