CentOSを実行しているマシンがいくつかあり、そのうちの1つはmysqlサーバーとして設定されています。私はしばらくこれを実行していましたが、リモートマシンからmysqlに問題なく接続できましたが、停電してすべてのPCを再起動した後、
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.22.6' (113)
サーバーマシンでは、MySQLサーバーにローカルで問題なく接続できます。
ざっと検索すると、113は「ホストへのルートがない」ことを意味するため、これはネットワークの問題のようです。クライアントマシンから192.168.22.6にpingを送信し、それにSSHで接続できます。
サーバーPCでnetstat -lnp | grep mysql
、私は得ます:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1588/mysqld
unix 2 [ ACC ] STREAM LISTENING 13448 1588/mysqld /var/lib/mysql/mysql.sock
そのため、ポート3306でリッスンしているようです。ただし、クライアントマシンに移動してnc -vz 192.168.22.6 3306
、私は得ます:
nc: connect to 192.168.22.6 port 3306 (tcp) failed: No route to Host
これはファイアウォールの問題かもしれないと思っています。サーバー上でiptables --list-rule | grep 3306
結果がありません。これは、ポート3306がファイアウォールによってブロックされていることを意味しますか(netstatがリスニングしていると示していても)?もしそうなら、どうすればそのポートの例外を追加できますか?それとも私はここで完全に間違った軌道に乗っていますか?
編集:my.cnfファイルが次のようになっていることにも注意してください。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
max_connections=500
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#bind-address = 192.168.22.6
slow_query_log=1
log-slow-queries = /var/log/mysql-slow.log
long_query_time = 10
log-queries-not-using-indexes
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
したがって、スキップネットワーキングはありません。 bind-addressが設定されていないことが問題かどうかはわかりませんか?
ポートが開いていることを確認し、
firewall-cmd --get-active-zones
ポートを開かない場合は、
firewall-cmd --zone=public --add-port=port_id/tcp --permanent
次に、ファイアウォールをリロードします
firewall-cmd --reload
Mysqlユーザーが別のホスト経由でアクセスできるようにします。
GRANT ALL PRIVILEGES ON user_name.* TO 'db_name'@'192.168.1.%' IDENTIFIED BY 'password';
'192.168.1。%':192.168.1.x範囲のすべてのホストからのアクセスを許可するか、IPを指定できます。