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

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

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

DBサーバー側(192.168.0.2)のIPアドレスにMariaDBをインストールします。

yum install -y mariadb-server

systemctl start maysqld

これで終わりです。後はmysql -u root -pでパスワードはかかっていないので空欄でログインします。

DBサーバーの設定をする

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

MySQLのユーザーを確認

MariaDB [(none)]> select user,host from mysql.user;

+------+-------------------------------+
| user | host                          |
+------+-------------------------------+
| root | 127.0.0.1                     |
| root | ::1                           |
| root | localhost                     |
+------+-------------------------------+

これでユーザー一覧が表示されます。今回はrootユーザーを追加してみたいと思います。

MariaDB [(none)]> grant all privileges on client_data.* to root@"192.168.0.%" identified by 'パスワード' with grant option;

これで完了です。というわけでWebサーバーからアクセスしてみたいとおもいます。

[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)

接続出来ませんでした。

原因:firewalldの設定を見直す

今回の原因はfirewalldの問題でした。DBサーバーにはfirewalldが動いているため、ここの設定を変更することで接続できます。DBサーバー側のfirewalldの設定を変更します。

firewall-cmd --permanent --add-service=mysql

systemctl restart firewalld

これで完了です。またWebサーバーから繫いでみたいと思います。

[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;

無事接続できました。

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

今回のDBサーバーはAacheやnginxなどは入っていなく、純粋にMariaDBのみです。firewalldを停止した状態でも問題ないかもしれませんが、不正アクセスする人はどんな方法でしてくるか予想はつかないこともあります。

firewalldを停止しているより、firewalldの設定を変えてMySQLを外部から許可しますという方法で運用できるならその方がセキュリティーは0.1%でも高くなると思います。そのためfirewalldを停止するよりは設定を変えてアクセスできるようにしています。