MySQLへのリモート接続を許可する方法


362

ローカルマシンにMySQL Community Edition 5.5をインストールしましたが、外部ソースから接続できるようにリモート接続を許可したいのですが。

どうやってやるの?



1
DigitalOceanを使用している場合は、を使用してみてくださいsudo mysql_secure_installation。ご参考までに。
Alan Dong

コードではないテキストにコード形式を使用しないでください。オフトピック。
ローン侯爵

@EJPなんで?好奇心のうち正直な疑問
ルネ・ロス

回答:


776

これはMySQLではデフォルトで許可されています。

デフォルトで無効になっているのはリモートrootアクセスです。これを有効にする場合は、次のSQLコマンドをローカルで実行します。

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

次に、次の行を見つけて、ファイル内でコメント化します。my.cnfファイルは通常/etc/mysql/my.cnf、Unix / OSXシステムにあります。場合によっては、ファイルの場所は/etc/mysql/mysql.conf.d/mysqld.cnfです。

それがWindowsシステムの場合、MySQLインストールディレクトリで見つけることができます。通常は次のようにC:\Program Files\MySQL\MySQL Server 5.5\ なり、ファイル名はになりますmy.ini

行を変更

 bind-address = 127.0.0.1

 #bind-address = 127.0.0.1

また、MySQLサーバー(Unix / OSX、およびWindows)を再起動して、変更を有効にします。


4
ファイルの最後にbinnd-address = 127.0.0.1を追加し、外部ホストからnavicatを使用して接続しようとしたところ、10060エラーが発生しました
Leo

7
うーん、追加する必要はありません。私の答えが言ったように、コメントを追加するのではなく、コメントアウトする必要があります。デフォルトでそこにあるので、あなたはそれを見つけて、#を前に付けてコメント化する必要があります
mjuarez

7
うーん、\ MYsql Server 5.5 \にはmy-default.iniと呼ばれるiniファイルが1つだけあり、#のない唯一の行はこれです:sql_mode = NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES
Leo

2
この答えは完璧に機能します。thnx @mjuarez-すべての特権を付与します。GRANT OPTION付きの 'password'で識別される 'root' @ '%'へ。
yadavr

66
my.cnfファイルを探していて、bind-addressその中にディレクティブが見つからない場合は、私の場合(Ubuntu 16.04.2のMySQLバージョン14.14)、ファイルの場所は/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon

49

上記のすべてを行った後も、rootリモートとしてログインできませんでしたが、ポートにTelnet 接続3306するMySQLと、接続が受け入れられていることが確認されました。

MySQLでユーザーを調べ始めたところ、異なるパスワードを持つ複数のrootユーザーがいることに気付きました。

select user, host, password from mysql.user;

だから、中にMySQL私は根のすべてのパスワードを設定して、再び、私は最終的に、遠隔でログインすることができroot

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
これは正しいです。他の回答の手順に従っている間に、パスワードが空のユーザーアカウントが作成されているようです。したがって、パスワードを追加する必要があります。
チャンティアル

1
私は受け入れられた答えをこれと組み合わせる必要があり、その後すべてが適切に機能しました。
James

8
SQL for 5.7以降update user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft 2018

受け入れられた答えはパスワードを設定し、私のために働きました。
MikeKulls 2018

1
@Jamesと同じように、修正するには、これを受け入れられた回答と組み合わせる必要がありました。
Ben Everard

39

私の経験からのメモとして、このパスの下に構成ファイルがあります/etc/mysql/mysql.conf.d/mysqld.cnf

(私はしばらくの間この道を見つけるのに苦労しました)


1
これは、使用しているディストリビューションに大きく依存します。最良の方法は、それを検索することです:sudo find /etc -iname 'mysql*.cnf'
マーティンKonecny

「検索」コマンドに感謝します。コマンドラインは初めてなので、とても役に立ちます。ありがとう!
Heres2u

私は/etc/mysq/conf.d/mysql.cnfの編集に何時間も苦労して、このアンスワールを見つけました。
Gayan Kavirathne

26

私の場合、私はセントOS上のリモートmysqlサーバーに接続しようとしていました。多くの解決策(すべての特権の付与、IPバインディングの削除、ネットワークの有効化)を行った後も、問題は解決されませんでした。

結局のところ、さまざまな解決策を検討しているときに、iptablesに出くわしました。その結果、mysqlポート3306が接続を受け入れていないことに気付きました。

ここでは、この問題を確認して解決した方法について簡単に説明します。

  • ポートが接続を受け入れているかどうかの確認:
telnet(mysql server ip)[portNo]
  • ポートでの接続を許可するIPテーブルルールを追加します。
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
  • 本番環境ではこれをお勧めしませんが、iptablesが適切に構成されていない場合は、ルールを追加しても問題が解決しない可能性があります。その場合、以下を実行する必要があります。
サービスiptables停止

お役に立てれば。


17

MySQLユーザーにワイルドカードリモートアクセスを設定するには、以下の手順に従ってください。

(1)cmdを開きます。

(2)パスC:\ Program Files \ MySQL \ MySQL Server 5.X \ binに移動して、このコマンドを実行します。

mysql -u root -p

(3)rootパスワードを入力します。

(4)以下のコマンドを実行して権限を付与します。

*。*のすべての特権を「パスワード」で識別される「ユーザー名」@「IP」に付与します。

USERNAME:MySQLサーバーに接続するユーザー名。

IP:MySQLサーバーへのアクセスを許可する場所からのパブリックIPアドレス。

PASSWORD:使用されるユーザー名のパスワード。

IPを%に置き換えて、ユーザーが任意のIPアドレスから接続できるようにすることができます。

(5)コマンドを実行して権限をフラッシュし、終了します。

FLUSH PRIVILEGES;

出口; または\ q

ここに画像の説明を入力してください


3
それを行った後、私のルートはまだアクセスが拒否されています。私は何を逃したのですか?
teapeng 2018年

4番目のステップでは、%の代わりにローカルシステムのIPアドレスを試すことができます。うまくいくはずです。%は任意のIPアドレスを意味します。
Hiren Parghi

6

MySQLサーバープロセスが127.0.0.1または:: 1のみをリッスンしている場合は、リモートで接続できません。これにbind-address設定がある場合/etc/my.cnfは、問題の原因である可能性があります。

localhostユーザーの権限も追加する必要があります。


奇妙なことに、サーバーが他のIP以外でどのように「リッスン」するの127.0.0.1でしょうか
Pacerier、2015年

2
@Pacerier 127.0.0.1はループバックインターフェイスにのみバインドされます。外部接続は機能しません。多くの場合、システムには複数のネットワークインターフェイスがあり、それぞれを具体的にバインドする必要があります。または、bind-all 0.0.0.0アドレスを使用できます。
tadman、2015年

6

MySQLをインストールした場合brew、デフォルトではローカルインターフェースのみをリッスンします。これを修正するには/usr/local/etc/my.cnfbind-addressfrom 127.0.0.1を編集して変更する必要があります*

次にを実行しbrew services restart mysqlます。


1
私のubuntu 16.04.4サーバーの場合、bind-address設定は/etc/mysql/mysql.conf.d/mysqld.cnfにあります
Frank

これは単にbrewを使用しているのではなく、どのMySQLにもローカル接続のみを許可するためのこのデフォルト設定があります。
nivs1978

6

リモートログインのすべてのプロセス。リモートログインはデフォルトでオフになっています。すべてのIPに対して手動で開く必要があります。すべてのIPにアクセスを許可するには

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

特定のIP

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

その後

flush privileges;

ユーザーホストとパスワードを確認できます

SELECT host,user,authentication_string FROM mysql.user;

今あなたの義務はこれを変えることです

bind-address = 127.0.0.1

あなたはこれを見つけることができます

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

これが見つからない場合は、これを試してください

sudo nano /etc/mysql/my.cnf

これにコメント

#bind-address = 127.0.0.1

次にMysqlを再起動します

sudo service mysql restart

リモートログインをお楽しみください


3

ちなみに、私は何時間もこの問題で髪を引っ張りました。最後にホスティングプロバイダーに電話をかけました。私の場合、コントロールパネルで1and1のクラウドサーバーを使用していて、ポートを複製して追加する必要があるセカンダリファイアウォールがあることがわかりました。 3306.一度追加すると、すぐに..


これはあなたの状況に非常に特有に聞こえます。私はネットワーキングに関する知識の無限の情報源ではありませんが、このソリューションがこの問題にうまく適用できると確信していますか?
Sandy Gifford 2016

2
私もこの問題を抱えています。クラウドでホストされているサーバーと共通
Matthew Lock

2

ファイアウォールサービスが実行されている場合は、ファイアウォールポート3306が開いていることを確認してください。



1

そして、OS Xの人々にとって、bind-addressパラメータは通常、my.iniファイルではなくlaunchd plistに設定されることに注意してください。したがって、私の場合、から削除<string>--bind-address=127.0.0.1</string>しました/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist


plistファイルの別の場所:~/Library/LaunchAgents
Dylan Nissley

1

バインドアドレスがループバック/ローカルアドレスに設定されmysqldている場合(など)、リモートホストからループバックインターフェースに到達できないため、サーバーはリモートホストから到達できません。127.0.0.1

このオプションを0.0.0.0::IPv4 + 6の場合)に設定して、任意のホストからの接続を受け入れるか、1つのインターフェースでのみ接続を許可する場合は、外部から到達可能な別のアドレスに設定します。

ソース


0

WindowsでPCの名前を使用する必要がある場合がある

最初のステップ) mysqlの構成ファイルを挿入します。

mysqld.cnf SET bind-address = 0.0.0.0

(TCP / IP経由で接続を受信できるようにするため)

第二段階)とMySQLでメイクユーザー、テーブルのユーザー、ウィンドウ上のPCの名前 propierties、 NOT IP

ここに画像の説明を入力してください


0

リモートrootアクセスを有効にすると危険な場合があります。より制限されたアクセス許可を持つユーザーアカウントをセットアップする場合は、望ましいでしょう。次の3つの手順でそれを行う必要があります。

  1. で始まる行がbind-address ...my.iniまたはmy.cnfファイルで少なくともコメント化されていることを確認してください。存在しない場合は次に進みます。このファイルはC:\ProgramData\MySQL\MySQL Server 8.0Windowsにあります。

  2. その後、接続の確立に使用しているユーザーアカウントが[ localhostホストマッチングの制限]フィールドにないことを確認します。推奨されませんが、代わりに%テスト目的でそのフィールドに入力できます。これを行うには、MySQL Workbenchを使用してサーバーへのローカル接続を開き、メニューバーから[サーバー]> [ユーザーと権限]に移動して、接続するユーザーアカウントを見つけます。

「ホストの一致に制限」フィールドは、ローカル以外の場所への接続を許可しないものです。つまり、受け入れられる接続をIPアドレスのパターンに制限します。理想的には、静的IPアドレスまたはサブネットからMySQLサーバーにアクセスして、できる限り制限を加える必要があります。

  1. 明らかに、ファイアウォールはMySQLサーバーアプリケーションが必要なポートを介して通信できるようにする必要があります。ユーザーとサーバーの間の物理的なネットワーク機器は、接続したいポートでの通信を許可する必要があります。(通常、ポート3306)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.