177

リモートの Ubuntu マシンに MySQL サーバーをインストールしました。rootユーザーは、mysql.userテーブルで次のように定義されます。

mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

標準クライアントrootを使用して、同じリモート マシンのコマンド ライン インターフェイスからuser でアクセスできます。ここで、インターネット上のすべてのホストからのルート アクセスmysqlを許可したいので、次の行を追加してみました (列を除いて、以前のダンプの最初の行とまったく同じです)。host

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

しかし、私の個人用 PC のクライアントは、引き続き次のように伝えます (サーバー IP を隠しました)。

SQL エラー (2003): '46.xxx' の MySQL サーバーに接続できません (10061)

認証エラーなのかネットワークエラーなのかわかりません。サーバーのファイアウォールで 0.0.0.0/0 のポート 3306/TCP を有効にしましが、それで問題ありません...

4

10 に答える 10

414

アップデート:

コメントで述べたように、MySql 8以降、最初にユーザーを明示的に作成する必要があるため、コマンドは次のようになります。

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

元の答え:

そのプロセスには2つのステップがあります。

a)特権を付与します。rootユーザーとして、これを現在のrootパスワードに置き換えて実行し'password'ます。

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

b)すべてのアドレスにバインドします。

最も簡単な方法は、ファイルの行をコメントアウトすることです。my.cnf

#bind-address = 127.0.0.1 

mysqlを再起動します

service mysql restart

デフォルトでは、ローカルホストにのみバインドされますが、行にコメントを付けると、検出されたすべてのインターフェイスにバインドされます。行をコメントアウトすることは、と同等bind-address=*です。

mysqlサービスがバインドされている場所を確認するには、rootとして実行します。

netstat -tupan | grep mysql

Ubuntu 16のアップデート:

設定ファイルは(現在)

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

(少なくとも標準のUbuntu 16では)

于 2012-06-27T11:53:56.633 に答える
46

次のクエリを実行します。

use mysql;
update user set host='%' where host='localhost'

注: 本番環境での使用はお勧めしません。

于 2014-06-12T17:24:27.910 に答える
11

時々

バインドアドレス = 127.0.0.1

する必要があります

バインドアドレス = *

于 2015-08-16T17:57:42.857 に答える
1

および mysql コマンド ラインから更新するbind-address = 0.0.0.0と、ユーザーは任意の IP から接続できるようになります。/etc/mysql/mysql.conf.d/mysqld.cnfroot

以下は、他のコマンドがエラーで失敗していたため、 mysql-8.0で機能した唯一のコマンドです。syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'abcd'' at line 1

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
UPDATE mysql.user SET host='%' WHERE user='root';

mysql クライアントを再起動します

sudo service mysql restart
于 2020-09-17T20:13:17.413 に答える