VagrantでMySQLを起動させて3306のポートフォワーディングを行っているときに、ホストOSから接続するとHost 'gateway' is not allowedエラーが出ることがあります。
(環境によっては'gateway'ではなく、'_gateway'になる場合もあります)
エラーの内容
# mysql -u root
ERROR 1130 (HY000): Host 'gateway' is not allowed to connect to this MySQL server
Vagrantfileの設定
Vagrant.configure("2") do |config|
config.vm.box = "bento/centos-7.3"
config.vm.network "forwarded_port", guest: 3306, host: 3306
...
エラーの理由
MySQLのデフォルトではrootがローカルホストからのみの接続が許可されています。
一方で、Vagrantにてforwarded_portでポートフォワーディングしたとき、MySQLは外部サーバのホスト名が"gateway"というPCから接続されとみなされます。
MySQLは"gateway"というホスト名のリモートPCからの接続を許可していないため、'ERROR 1130'が発生しています。
解決方法
以下のコマンドを実行し、root@gatewayユーザへ対して接続許可を与えればよいです。
(エラーメッセージが'gateway'ではなく、'_gateway'だった場合はホスト名を読み替えてください)
# vagrantで動作するゲストOSで実行
mysql -u root -e "create user 'root'@'gateway' identified by '';"
mysql -u root -e "grant all privileges on *.* to 'root'@'gateway' with grant option;"
mysql -u root -e "flush privileges;"
許可を与えた後、ホストOSから接続してエラーが出ないことを確認します。
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.38 MySQL Community Server (GPL)
...
mysql>
こちらもおススメ