web-dev-qa-db-ja.com

全ホストからのMySQLルートアクセス

MySQLサーバをリモートのUbuntuマシンにインストールしました。 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クライアントを使用して、同じリモートマシンのコマンドラインインターフェイスからユーザーmysqlでアクセスできます。今私はインターネット上のすべてのホストからのrootアクセスを許可したいので、次の行を追加してみました(これは前のダンプの最初の行の正確な複製です) Host列を除く)

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

しかし、私の個人的なPC上の私のクライアントは私に言い続けます(私はサーバーIPを隠しました):

SQLエラー(2003):'46 .x.x.x 'のMySQLサーバーに接続できない(10061)

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

130
lorenzo-s

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

a)特権を与えます。 rootユーザーとして実行します。

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

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

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

#bind-address = 127.0.0.1 

そしてmysqlを再起動

service mysql restart

デフォルトではlocalhostだけにバインドしますが、あなたがその行をコメントするとそれが見つけたすべてのインターフェースにバインドします。コメントアウトすることはbind-address=*と同等です。

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

netstat -tupan | grep mysql

Ubuntu 16用の更新:

設定ファイルは(今)

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

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

315
hovanessyan

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

use mysql;

update user set Host='%' where Host='localhost'

注:本番用にはお勧めできません。

29
Babu James

時々

bind-address = 127.0.0.1

あるべき

bind-address = *

7
user2839051

MariaDBがRaspbian上で動作している - bind-addressを含むファイルを特定するのが難しい。 MariaDBの件名には 非常に有用ではない情報 があります。

私が使った

# Sudo grep -R bind-address /etc 

いまいましいことがどこにあるかを見つけるために。

私も上記のみんなが指摘したようにmysqlで特権とホストを設定する必要がありました。

そして私のRaspberry Piへのリモート接続のために3306ポートを開くのも少し楽しい時間を過ごしました - ついに使用された iptables-persistent

すべてうまくいっています。

4
The Big Zank

MYSQL 8.0 - mysqlコマンドラインクライアントを開く
*。*のすべての権限を 'root' @ 'localhost'に付与します。
mysqlを使用
UPDATE mysql.user SET Host = '%' WHERE user = 'root';
mysqlサービスを再起動します

2
user10580057

あなたのOSに多数のネットワークが接続されている場合は、my.confファイルのbind-addresでこのネットワークの1つを指定しなければなりません。例:

[mysqld]
bind-address = 127.100.10.234

このIPはethX設定からのものです。

1
felipe cardenas

私の場合は "bind-address"設定が問題でした。 my.cnfでこの設定をコメントすると、nothelpになりました。なぜなら、私の場合mysqlはなんらかの理由でデフォルトを127.0.0.1に設定しているからです。

MySqlが現在使用している設定を確認するには、ローカルボックスでコマンドラインを開きます。

mysql -h localhost -u myname -pmypass mydb

現在の設定を読みます。

Show variables where variable_name like "bind%"

すべてのホストからのアクセスを許可したい場合は、ここに0.0.0.0と表示されるはずです。そうでない場合は、/etc/mysql/my.cnfを編集し、[mysqld]セクションの下にbind-addressを設定します。

bind-address=0.0.0.0

最後にMySqlサーバーを再起動して新しい設定を選択します。

Sudo service mysql restart

もう一度やり直して、新しい設定が選択されているかどうかを確認してください。

1
iHaveacomputer

mysql_updateはあなたが必要としているものです。

MySqlが丁寧に既にこれを行うツールを構築したときに、なぜ誰かがこの問題を修正するためのより複雑な方法に従うのか私にはわかりません...

0
Kieran Foot