どういうわけか、私は自分の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.cnfはバインドIPをコメントアウトした。
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
IPを指定したくない場合はbind-address = 0.0.0.0
を追加してください。
その後、新しいmy.cnfエントリを使用してMySQLを停止して再起動します。実行したら端末に行き、次のコマンドを入力して下さい。
lsof -i -P | grep :3306
それはあなたの実際のIPアドレスのxxxの中にこのようなものが戻ってくるはずです。
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ディストリビューションに基づいてインストール HERE できます。物事をうまく機能させるためにlsofを必要としませんが、物事が期待通りに機能していない場合は非常に便利です。
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;
3)mysqlサーバーマシンでnetfilterファイアウォールが有効になっている場合(Sudo ufw enable
)、リモートアクセス用にポート3306を開くために次の手順を実行します。
Sudo ufw allow 3306
を使用してステータスを確認
Sudo ufw status
4)リモート接続が確立されると、クライアントまたはサーバーマシンでコマンドを使用して確認できます。
netstat -an | grep 3306
netstat -an | grep -i established
MySQLはlocalhostのみをリッスンします。リモートアクセスを有効にしたい場合は、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
Windowsでテストする場合は、ポート3306を開くことを忘れないでください。