Mysql的Vagrant端口转发

时间:2015-10-15 10:34:38

标签: mysql vagrant portforwarding vagrantfile

我正在尝试在Vagrantfile中设置端口转发以从主机系统连接到guest虚拟机mysqld,但是出现reading initial communication packet错误。 主持人:Yosemite,嘉宾:Trusty,vagrant 1.7.4

Vagrantfile(主机):

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 3309

的my.ini(客体):

bind-address            = 127.0.0.1

8080转发就像魅力一样。

来自客人的

mysql -h127.0.0.1 -uroot -p也可以。

来自主机的

mysql -h127.0.0.1 -P 3309 -uroot -p导致reading initial communication packet错误。

当我从主机远程登录时,连接立即关闭:

$ telnet localhost 3309
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

当我从主机ssh到vagrant box时,端口转发工作正常:

$ssh vagrant@127.0.0.1 -p 2222 -L3308:localhost:3306 

然后我可以毫无问题地从主机mysql -h127.0.0.1 -P3308 -uroot -p连接,我将其用作临时解决方法。

3 个答案:

答案 0 :(得分:21)

终于能够让它发挥作用 -

编辑/etc/mysql/my.cnf文件并确保

  • 您有bind-address = 0.0.0.0
  • 或您对该行#bind-address ...
  • 发表评论

您可能需要将其添加到my.cnf文件的mysqld部分:

[mysqld]
bind-address = 0.0.0.0

确保在更改后重新启动mysql服务器

$ sudo service mysql restart

然后你可以从你的主机连接 - 所以我首先遇到了像

这样的错误
$ mysql -h127.0.0.1 -P 3309 -uroot -p
Enter password:
ERROR 1130 (HY000): Host '172.16.42.2' is not allowed to connect to this MySQL server

所以我回到客人那里做了

vagrant@precise64:~$ mysql -h127.0.0.1 -uroot -p
...
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.42.2' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

然后我没有问题从主机连接

$ mysql -h127.0.0.1 -P 3309 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.44-0ubuntu0.12.04.1 (Ubuntu)

答案 1 :(得分:2)

第一个答案是对的,但还不够。当我连接MySQL时,我收到一个错误:

  

主机'10 .0.2.2'不允许连接到此MySQL服务器

解决方案:

  

创建由'password'标识的用户'root'@'10.0.2.2';

     

使用授权选项将的所有权限授予'root'@'10.0.2.2';

     

刷新权限;

啊哈,所有问题都解决了,

答案 2 :(得分:2)

个人而言,我无需为开发Vagrant框而修改MySQL-这既耗时又难以在预配器中编写脚本,这意味着您每次vagrany destroy或新开发人员开始贡献时都必须手工完成。相反,我通过SSH隧道进行连接,使用Vagrant生成的private_key文件可以使SSH隧道变得非常容易。无需其他安装后调整。

按照以下步骤使用SequelPro,MySql Workbench或任何其他支持SSH连接的客户端进行SSH隧道:

  • 选择SSH连接选项
  • 处于SSH模式的“主机”变为localhost或特定地变为127.0.0.1(更可预测的跨操作系统)
  • 用户名/密码是数据库用户名/密码。对于开发,您只需使用root即可在预配器中定义/创建密码(请参见下面的代码段)
  • SSH用户名是Vagrant
  • 没有SSH密码-只需将private_key用于Vagrant计算机,位于VM项目根目录的.vagrant/machines/default/virtualbox中;请注意,在大多数操作系统的此目录中,所有以.开头的目录都是隐藏的

要自动安装和创建root密码,请将其添加到您的Vagrant设置程序脚本文件(Vagrantfile中的config.vm.provision),通常命名为provisioner.sh

debconf-set-selections <<< 'mysql-server mysql-server/root_password password SuperSecretPasswordHere'
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password SuperSecretPasswordHere'

apt-get install -y mysql-server

希望这有助于节省其他人的时间!