Como se conectar ao servidor Mysql dentro do VirtualBox Vagrant?

93

Montei uma nova máquina VirtualBox com Vagrant, e dentro dessa VM instalei o Mysql Server. Como posso me conectar a esse servidor fora da vm? Já encaminhei a porta 3306 do Vagrantfile, mas quando tento me conectar ao servidor mysql responde com o erro: 'lendo pacote de comunicação inicial'

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
Rizidoro
fonte
Você pode compartilhar mais de sua configuração, especificamente as opções de rede (quantas, digite [bridged, NAT, ...]), bem como uma captura de tela dos encaminhamentos de porta que você fez? Também pode ser um problema relacionado ao firewall em sua VM.
Goyuix

Respostas:

125

Certifique-se de que o MySQL se liga a 0.0.0.0 e não 127.0.0.1 ou não estará acessível de fora da máquina

Você pode garantir isso editando seu arquivo my.conf e procurando o bind-addressitem com a qual deseja que ele se pareça bind-address = 0.0.0.0. Em seguida, salve e reinicie o mysql:

sudo service mysql restart

Se estiver fazendo isso em um servidor de produção, você deseja estar ciente das implicações de segurança, discutidas aqui: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0

Dror Bereznitsky
fonte
Este foi definitivamente o caso da minha instalação do mysql 5.5. Pelos comentários em mysql.conf, acho que varia de acordo com a versão - eles costumam ter a configuração comentada mencionada em outras respostas.
atracado em
7
Você pode automatizar esta etapa em seu arquivo de bootstrap com o seguinte comando (testado no CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac
ou apenas comente a bind-addresslinha
xiaoyifang
9
Eu entendo isso Host '10.0.2.2' is not allowed to connect to this MySQL server. Mas resolvido com serverfault.com/a/486716/147813
CMCDragonkai
2
Além do link @CMCDragonkai serverfault (não tenho reputação lá para comentar), este comando pode ser usado em algo como um script Ansible para automatizar a concessão de permissões de usuário 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

Faça login na sua caixa com ssh [email protected] -p 2222(senha vagrant)

Então: sudo nano /etc/mysql/my.cnfe comente as seguintes linhas com #

#skip-external-locking 
#bind-address

salve e saia

então: sudo service mysql restart

Então você pode se conectar por SSH ao seu servidor MySQL.

Youri van den Bogert
fonte
10
Comentei com "#" em vez de ";"
Jay,
3
Tenho que vincular o endereço e executar este: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
Um Nguyen
Obrigado, isso estava me incomodando há muito tempo. # skip-external-lockingResolvi-o!
Jack
18

Eu me deparei com esse problema recentemente. Usei o PuPHPet para gerar uma configuração.

Para conectar ao MySQL através de SSH, a senha "vagrant" não estava funcionando para mim, em vez disso, tive que autenticar por meio do arquivo de chave SSH.

Para conectar-se ao MySQL Workbench

Método de conexão

TCP / IP padrão sobre SSH

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)

Teste a conexão.

radiohub
fonte
Fiz basicamente a mesma coisa para me conectar ao banco de dados com o Phpstorm, mas em vez do PuPHPet usei o Protobox.
nulo
17

Para quem está tentando fazer isso usando mysql workbench ou sequel pro, estas são as entradas:

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)

fonte: https://coderwall.com/p/yzwqvg

Sarmen B.
fonte
1
Isso foi muito útil! Não
precisei
1
Certifique-se de remover todas as chaves públicas do arquivo known_hosts da máquina host que sejam para o mesmo host (endereço IP). Isso terá acontecido se você estiver usando outra VM Vagrant com o mesmo endereço IP
Jon Hudson
Você também pode obter os valores de configuração SSH do vagrant ssh-configcomando.
Tayler
13

Bem, uma vez que nenhuma das respostas fornecidas me ajudou, tive que procurar mais e encontrei a solução neste artigo.

E a resposta em poucas palavras é a seguinte:

Conectando-se ao MySQL usando o MySQL Workbench

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

Usando a abordagem dada, fui capaz de me conectar ao banco de dados mysql no vagrant a partir da máquina Ubuntu host usando MySQL Workbench e também usando Valentina Studio.

AbstractVoid
fonte
Estou usando o Valentina, que é basicamente o MySQL Workbench em termos de como alguém se conectaria a um servidor convidado Vagrant. De todas as respostas, esta aqui, fez funcionar. Todas as outras coisas foram tratadas por mim pelo PuPHPet, então todas as configurações do Vagrant são provavelmente mais para aquelas pessoas que gostam de configurar manualmente seus Vagrantfiles. Para as pessoas da PuPHPet, esta é a resposta.
criações incomparáveis ​​de
Tive de especificar o caminho do arquivo de chave SSH para o arquivo de chave privada da caixa vagrant: $HOME/project/.vagrant/machines/default/virtualbox/private_keyno Ubuntu 14.04
Francisco Quintero
Você também pode obter os valores de configuração SSH do vagrant ssh-configcomando.
Tayler
2

Aqui estão as etapas que funcionaram para mim depois de fazer o login na caixa:

Localize o arquivo de configuração do 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

No Ubuntu 16, o caminho é normalmente /etc/mysql/mysql.conf.d/mysqld.cnf

Alterar arquivo de configuração para endereço de ligação:

Se existir, altere o valor da seguinte maneira. Se não existir, adicione-o em qualquer lugar na seção [mysqld].

bind-address = 0.0.0.0

Salve suas alterações no arquivo de configuração e reinicie o serviço MySQL.

service mysql restart

Criar / conceder acesso ao usuário do banco de dados:

Conecte-se ao banco de dados MySQL como usuário raiz e execute os seguintes comandos SQL:

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

mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%';
Rajkaran Mishra
fonte
1

Isso funcionou para mim: Conecte-se ao MySQL no Vagrant

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
DannyFeliz
fonte