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を有効にしました。
そのプロセスには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では)
次のクエリを実行します。
use mysql;
update user set Host='%' where Host='localhost'
注:本番用にはお勧めできません。
時々
bind-address = 127.0.0.1
あるべき
bind-address = *
MariaDBがRaspbian上で動作している - bind-addressを含むファイルを特定するのが難しい。 MariaDBの件名には 非常に有用ではない情報 があります。
私が使った
# Sudo grep -R bind-address /etc
いまいましいことがどこにあるかを見つけるために。
私も上記のみんなが指摘したようにmysqlで特権とホストを設定する必要がありました。
そして私のRaspberry Piへのリモート接続のために3306ポートを開くのも少し楽しい時間を過ごしました - ついに使用された iptables-persistent 。
すべてうまくいっています。
MYSQL 8.0 - mysqlコマンドラインクライアントを開く
*。*のすべての権限を 'root' @ 'localhost'に付与します。
mysqlを使用
UPDATE mysql.user SET Host = '%' WHERE user = 'root';
mysqlサービスを再起動します
あなたのOSに多数のネットワークが接続されている場合は、my.confファイルのbind-addresでこのネットワークの1つを指定しなければなりません。例:
[mysqld]
bind-address = 127.100.10.234
このIPはethX設定からのものです。
私の場合は "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
もう一度やり直して、新しい設定が選択されているかどうかを確認してください。
mysql_update
はあなたが必要としているものです。
MySqlが丁寧に既にこれを行うツールを構築したときに、なぜ誰かがこの問題を修正するためのより複雑な方法に従うのか私にはわかりません...