ERROR 2003 (HY000): Can't connect to MySQL server onの対処方法

さくらのVPSを構築していて、WebサーバーからDBサーバーへローカル接続しようとしたら起きました。

DBサーバーにMariaDBがインストール

DBサーバー側(192.168.0.2)のIPアドレスにMariaDBをインストールします。 [c] yum install -y mariadb-server systemctl start maysqld [/c] これで終わりです。後はmysql -u root -pでパスワードはかかっていないので空欄でログインします。

DBサーバーの設定をする

MySQLはデフォルトの設定では外部からの接続は拒否されています。今回は外部(192.168.20.xx)のサーバーからアクセスしたいのでローカル接続を許可します。 ※この段階ではDBサーバー(192.168.0.2)とWebサーバー(192.168.0.1)はローカル接続されていて、pingによる疎通が終わっている前提となります。

MySQLのユーザーを確認

[c] MariaDB [(none)]> select user,host from mysql.user; +------+-------------------------------+ | user | host | +------+-------------------------------+ | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-------------------------------+ [/c] これでユーザー一覧が表示されます。今回はrootユーザーを追加してみたいと思います。 [c] MariaDB [(none)]> grant all privileges on client_data.* to root@"192.168.0.%" identified by 'パスワード' with grant option; [/c] これで完了です。というわけでWebサーバーからアクセスしてみたいとおもいます。 [c] [root@ ~]# mysql -h 192.168.0.2 -u root -p Enter password: パスワード入力 Enter; ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.2' (113) [/c] 接続出来ませんでした。

原因:firewalldの設定を見直す

今回の原因はfirewalldの問題でした。DBサーバーにはfirewalldが動いているため、ここの設定を変更することで接続できます。DBサーバー側のfirewalldの設定を変更します。 [c] firewall-cmd --permanent --add-service=mysql systemctl restart firewalld [/c] これで完了です。またWebサーバーから繫いでみたいと思います。 [c] [root@ ~]# mysql -h 192.168.2.2 -u root -p Enter password: パスワード入力 Enter; Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 118 Server version: 5.5.47-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> exit; [/c] 無事接続できました。

firewalldを停止すればいいのでは?

今回のDBサーバーはAacheやnginxなどは入っていなく、純粋にMariaDBのみです。firewalldを停止した状態でも問題ないかもしれませんが、不正アクセスする人はどんな方法でしてくるか予想はつかないこともあります。 firewalldを停止しているより、firewalldの設定を変えてMySQLを外部から許可しますという方法で運用できるならその方がセキュリティーは0.1%でも高くなると思います。そのためfirewalldを停止するよりは設定を変えてアクセスできるようにしています。