リモート接続Mysql Ubuntu


95

何らかの理由で、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.cnfbind ipをコメントアウトしました。


MySQLのどのバージョンを使用していますか?
Steve

サーバーのバージョン:5.5.29-0ubuntu0.12.10.1(Ubuntu)
Cristian Eduardo Lehuede Lyon

このコマンドは何を返しますか?ubuntu〜$ sudo lsof -i -P | grep:3306
apesa 2013年

回答:


345

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

または bind-address = 0.0.0.0、IPを指定しない場合は、

次に、新しいmy.cnfエントリでMySQLを停止して再起動します。実行したらターミナルに行き、次のコマンドを入力します。

lsof -i -P | grep :3306

これは、xxxの実際のIPでこのようなものに戻るはずです

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ディストリビューションに基づいてここにインストールできます。機能させるためにlsofは必要ありませんが、期待どおりに機能しない場合は非常に便利です。


1
おかげで、私はこの手順を最初は正しく実行しましたが、あなたが投稿して魅力のように働いたので、もう一度実行しました!
クリスティアンエドゥアルドレフエデリヨン2013

14
で苦労している他の人にとってlsof -i -P | grep :3306、それは機能しませんでしたが、リモート接続は確認なしで引き続き正常に機能します。適切な出力が表示されない場合は無視してください。
Mike S

@Mike Slutskyメモをありがとう、私は私の回答を編集しました。lsofがまだインストールされていない場合は、インストールできます。
apesa

2
多くのシステムのFWIW sudo lsof -i -Plsof -i -P(非特権ユーザーとしてログインしている場合)よりもはるかに便利です。
Dan

2
lsof -i -P | grep :3306何も返さない!
グリーン

39

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;

user == mysqlへの接続に使用するユーザーex.root
passwd == mysqlへの接続に使用するパスワード

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

sudo ufw allow 3306

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

sudo ufw status

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

netstat -an | grep 3306
netstat -an | grep -i established

3
これは私の一日を救った!ありがとうsudo ufw status!!
Riddhiman Adib 2017

netstat -nlt | grep 3306空を返します
ジョアンピメンテルフェレイラ

@JoãoPimentel Ferreiraが最初にmysqlが実行されていることを確認し、コマンド「/etc/init.d/mysql status」を使用して確認します
Jonathan L

8

MySQLはローカルホストのみをリッスンします。ローカルホストへのリモートアクセスを有効にする場合は、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

1
必ずコメントしてくださいskip-external-locking
calebeaires

1
私はskip-external-lockingをコメントアウトしませんでしたが、それでも機能します。
Marcia Ong

/etc/mysql/mysql.conf.dで変更する必要がありました
Bartando

鉱山は、この場所である:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
レスター

1

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


ああ、あなたは天才です。LinuxのWindowsサブシステムを使用している場合、これは非常に重要です。Windowsファイアウォールを通過するインバウンドトラフィック用にポート3306を開く必要があります。MySQLがリッスンしているかどうかを確認する上記のいずれもサブシステム
ブライアンリーシュマン

1

あなたはubuntu 12(かなり古いもの)を使用しています

まず、/ etc / mysql / mysql.conf.d / mysqld.cnfファイル(Ubuntu 14.04以前のバージョンでは/etc/mysql/my.cnf)を開きます。

[mysqld]の下で、次の行を見つけます。bind-address = 127.0.0.1そして、それをbind-address = 0.0.0.0に変更するか、コメント化します。

次に、Ubuntu MysQLサーバーを再起動します systemctl restart mysql.service

これで、UbuntuサーバーはMySQLサーバーへのリモートアクセスを許可しますが、MySQLユーザーが任意のホストからのアクセスを許可するように構成する必要があります。

ユーザー'username'@'%'は必要なすべての許可を持っている必要があります

MySQLサーバーがすべてのインターフェースで待機することを確認するには、次のようにnetstatコマンドを実行します。

netstat -tulnp | grep mysql

これがうまくいくことを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.