如何在VirtualBox Vagrant中连接到Mysql Server?


93

我安装了带有Vagrant的新VirtualBox Machine,并在该VM内安装了Mysql Server。如何连接到vm之外的服务器?我已经转发了Vagrantfile的端口3306,但是当我尝试连接到mysql服务器时,它会重新发布,并显示以下错误:“读取初始通信数据包”

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

您是否可以共享更多配置,特别是网络选项(多少个,键入[bridged,NAT,...])以及您所做的端口转发的屏幕截图?这也可能是VM上与防火墙相关的问题。
Goyuix 2012年

Answers:


125

确保MySQL绑定到0.0.0.0而不是127.0.0.1,否则无法从计算机外部访问它

您可以通过编辑my.conf文件并查找该bind-address项目来确保这一点-您希望它看起来像bind-address = 0.0.0.0。然后保存并重启mysql:

sudo service mysql restart

如果要在生产服务器上执行此操作,则要了解安全隐患,请在此处进行讨论:https : //serverfault.com/questions/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


我的mysql 5.5安装绝对是这种情况。从mysql.conf中的注释中,我认为它随版本而有所不同-它们用于获得其他答案中提到的注释掉的配置。
2013年

7
您可以使用以下命令(在CentOS上测试)在引导文件中自动执行此步骤:sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac 2014年

或只是划出bind-address界线
xiaoyifang 2014年

9
我明白了Host '10.0.2.2' is not allowed to connect to this MySQL server。但是通过serverfault.com/a/486716/147813
CMCDragonkai

2
除了@CMCDragonkai serverfault链接(我没有信誉的评论)之外,此命令还可以用于类似于Ansible脚本的操作,以自动授予root用户权限:mysql -e "create user 'root'@'10.0.2.2' identified by 'vagrant'; grant all privileges on *.* to 'root'@'10.0.2.2' with grant option; flush privileges;"
KayakinKoder

49

使用ssh vagrant@127.0.0.1 -p 2222(密码无业游民)登录到您的邮箱

然后:sudo nano /etc/mysql/my.cnf并用#注释掉以下几行

#skip-external-locking 
#bind-address

保存并退出

然后: sudo service mysql restart

然后,您可以通过SSH连接到MySQL服务器。


10
我用“#”而不是“;”注释掉
杰伊

3
我必须绑定地址并运行它: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
Nguyen

谢谢,这困扰了我好久了。# skip-external-locking解决了!
杰克

18

我最近遇到了这个问题。我使用PuPHPet生成配置。

要通过SSH连接到MySQL,“ vagrant”密码对我不起作用,相反,我必须通过SSH密钥文件进行身份验证。

与MySQL Workbench连接

连接方式

SSH上的标准TCP / IP

SSH协议

Hostname: 127.0.0.1:2222 (forwarded SSH port)
Username: vagrant
Password: (do not use)
SSH Key File: C:\vagrantpath\puphpet\files\dot\ssh\insecure_private_key
              (Locate your insercure_private_key)

的MySQL

Server Port: 3306
username: (root, or username)
password: (password)

测试连接。


我用Phpstorm连接数据库的操作基本上相同,但是我使用Protobox代替PuPHPet。
空值

17

对于尝试使用mysql workbench或sequel pro进行此操作的任何人,这些都是输入:

Mysql Host: 192.168.56.101 (or ip that you choose for it)
username: root (or mysql username u created)
password: **** (your mysql password)
database: optional
port: optional (unless you chose another port, defaults to 3306)

ssh host: 192.168.56.101 (or ip that you choose for this vm, like above)
ssh user: vagrant (vagrants default username)
ssh password: vagrant (vagrants default password)
ssh port: optional (unless you chose another)

来源:https : //coderwall.com/p/yzwqvg


1
这非常有帮助!我完全不需要使用虚拟框和ssh代理转发来调整绑定地址
kasakka 2013年

1
确保从主机的known_hosts文件中删除用于同一主机(IP地址)的所有公钥。如果您一直在使用具有相同IP地址的另一个Vagrant VM,将会发生这种情况
Jon Hudson

您还可以从vagrant ssh-config命令获取SSH配置值。
Tayler

13

那么,既然没有给出答复的帮助我,我不得不寻找更多的研究,发现解决这个文章。

简而言之,答案如下:

使用MySQL Workbench连接到MySQL

Connection Method: Standard TCP/IP over SSH
SSH Hostname: <Local VM IP Address (set in PuPHPet)>
SSH Username: vagrant (the default username)
SSH Password: vagrant (the default password)
MySQL Hostname: 127.0.0.1
MySQL Server Port: 3306
Username: root
Password: <MySQL Root Password (set in PuPHPet)>

使用给定的方法,我能够使用MySQL Workbench和Valentina Studio从主机Ubuntu机器中无所事事地连接到mysql数据库。


我正在使用Valentina,就如何连接到Vagrant来宾服务器而言,它基本上是MySQL Workbench。在所有答案中,这个答案就在这里,使它起作用。PuPHPet为我处理了所有其他工作,因此Vagrant配置工作可能更适合那些希望手动配置其Vagrantfiles的人。对于PuPHPet人士来说,这就是答案。
2015年

我必须为无业游民的盒子指定私钥文件的SSH密钥文件路径:$HOME/project/.vagrant/machines/default/virtualbox/private_key在Ubuntu 14.04
Francisco Quintero

您还可以从vagrant ssh-config命令获取SSH配置值。
Tayler

2

登录框后,以下是对我有用的步骤:

找到MySQL配置文件:

$ mysql --help | grep -A 1 "Default options"

Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

在Ubuntu 16上,路径通常是 /etc/mysql/mysql.conf.d/mysqld.cnf

更改绑定地址的配置文件:

如果存在,请如下更改值。如果不存在,则将其添加到[mysqld]部分的任何位置。

bind-address = 0.0.0.0

将更改保存到配置文件,然后重新启动MySQL服务。

service mysql restart

创建/授予对数据库用户的访问权限:

以root用户身份连接到MySQL数据库并运行以下SQL命令:

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';

mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%';

1

这对我有用在Vagrant中连接到MySQL

username: vagrant password: vagrant

sudo apt-get update sudo apt-get install build-essential zlib1g-dev
git-core sqlite3 libsqlite3-dev sudo aptitude install mysql-server
mysql-client


sudo nano /etc/mysql/my.cnf change: bind-address            = 0.0.0.0


mysql -u root -p

use mysql GRANT ALL ON *.* to root@'33.33.33.1' IDENTIFIED BY
'jarvis'; FLUSH PRIVILEGES; exit


sudo /etc/init.d/mysql restart




# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|

  config.vm.box = "lucid32"

  config.vm.box_url = "http://files.vagrantup.com/lucid32.box"

  #config.vm.boot_mode = :gui

  # Assign this VM to a host-only network IP, allowing you to access
it   # via the IP. Host-only networks can talk to the host machine as
well as   # any other machines on the same network, but cannot be
accessed (through this   # network interface) by any external
networks.   # config.vm.network :hostonly, "192.168.33.10"

  # Assign this VM to a bridged network, allowing you to connect
directly to a   # network using the host's network device. This makes
the VM appear as another   # physical device on your network.   #
config.vm.network :bridged

  # Forward a port from the guest to the host, which allows for
outside   # computers to access the VM, whereas host only networking
does not.   # config.vm.forward_port 80, 8080

  config.vm.forward_port 3306, 3306

  config.vm.network :hostonly, "33.33.33.10"


end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.