Host xxx is not allowed to connect to this MySQL server への対処法

エラー

MySQLに外部から接続しようとした際に、以下のエラーが発生。

Mysql2::Error: Host '172.22.0.1' is not allowed to connect to this MySQL server

原因

原因は、指定したユーザーに、外部からのアクセス権がないことです。

実際にMySQLにて以下を実行すると、指定ユーザー(sample_user)の host が localhost のみになっています。

これだとMySQLサーバーのコンテナ内からしかアクセスができません。

mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| sample_user      | localhost |
+------------------+-----------+

対処方法

外部アクセスを許可するユーザーを作成し、権限を設定します。

以下のコマンドを実行します。

CREATE USER 'sample_user' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON *.* TO 'sample_user'@'%' WITH GRANT OPTION;

ユーザーの状態を確認すると、sample_userが新たに追加され、host が%(ワイルドカード)になっています。

mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| sample_user      | localhost |
| sample_user      | %         |
+------------------+-----------+

これでsample_userに対して外部からのアクセスが可能となります。