¿Cómo conectarse al servidor Mysql dentro de VirtualBox Vagrant?

93

Monté una nueva máquina VirtualBox con Vagrant, y dentro de esa VM instalé Mysql Server. ¿Cómo puedo conectarme a ese servidor fuera de la máquina virtual? Ya reenvío el puerto 3306 del Vagrantfile, pero cuando intento conectarme al servidor mysql, aparece el error: 'leyendo el paquete de comunicación inicial'

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
rizidoro
fuente
¿Puede compartir más de su configuración, específicamente las opciones de red (cuántas, tipo [puenteado, NAT, ...]) así como una captura de pantalla de los reenvíos de puerto que hizo? También puede ser un problema relacionado con el firewall en su VM.
Goyuix

Respuestas:

125

Asegúrese de que MySQL se vincule a 0.0.0.0 y no a 127.0.0.1 o no será accesible desde fuera de la máquina

Puede asegurarse de esto editando su archivo my.conf y buscando el bind-addresselemento que desea que tenga bind-address = 0.0.0.0. Luego guarde esto y reinicie mysql:

sudo service mysql restart

Si está haciendo esto en un servidor de producción, debe estar al tanto de las implicaciones de seguridad, que se describen aquí: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0

Dror Bereznitsky
fuente
Este fue definitivamente el caso de mi instalación de mysql 5.5. De los comentarios en mysql.conf, creo que varía según la versión: suelen tener la configuración comentada mencionada en otras respuestas.
amarrado el
7
Puede automatizar este paso en su archivo de arranque con el siguiente comando (probado en CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac
o simplemente comente la bind-addresslínea
xiaoyifang
9
Entiendo esto Host '10.0.2.2' is not allowed to connect to this MySQL server. Pero resuelto con serverfault.com/a/486716/147813
CMCDragonkai
2
Además del enlace predeterminado del servidor @CMCDragonkai (no tengo reputación allí para comentar), este comando se puede usar en algo así como un script de Ansible para automatizar la concesión de permisos de usuario raíz: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

Inicie sesión en su caja con ssh [email protected] -p 2222(contraseña vagabundo)

Luego: sudo nano /etc/mysql/my.cnfy comenta las siguientes líneas con #

#skip-external-locking 
#bind-address

guardarlo y salir

luego: sudo service mysql restart

Luego, puede conectarse a través de SSH a su servidor MySQL.

Youri van den Bogert
fuente
10
Comenté con "#" en lugar de ";"
Jay
3
Tengo que vincular la dirección y ejecutar esto: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen
Gracias, esto me ha estado preocupando por mucho tiempo. # skip-external-locking¡resuelto!
Jack
18

Me encontré con este problema recientemente. Usé PuPHPet para generar una configuración.

Para conectarme a MySQL a través de SSH, la contraseña de "vagabundo" no me funcionaba, sino que tenía que autenticarme a través del archivo de clave SSH.

Para conectarse con MySQL Workbench

Método de conexión

TCP / IP estándar 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)

Prueba la conexión.

radiohub
fuente
Hice básicamente lo mismo para conectarme a la base de datos con Phpstorm, pero en lugar de PuPHPet usé Protobox.
nulo
17

Para cualquiera que intente hacer esto usando mysql workbench o sequel pro, estas son las 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)

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

Sarmen B.
fuente
1
¡Esto fue muy útil! No tuve que ajustar la dirección de enlace en absoluto usando la caja virtual y el reenvío del agente ssh
kasakka
1
Asegúrese de eliminar todas las claves públicas del archivo known_hosts de su máquina host que sean para el mismo host (dirección IP). Esto habrá sucedido si ha estado usando otra VM Vagrant con la misma dirección IP
Jon Hudson
También puede obtener los valores de configuración SSH desde el vagrant ssh-configcomando.
Tayler
13

Bueno, dado que ninguna de las respuestas dadas me ayudó, tuve que buscar más y encontré una solución en este artículo.

Y la respuesta en pocas palabras es la siguiente:

Conexión a MySQL usando 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 el enfoque dado, pude conectarme a la base de datos mysql en vagrant desde la máquina host de Ubuntu usando MySQL Workbench y también usando Valentina Studio.

ResumenVoid
fuente
Estoy usando Valentina, que es básicamente MySQL Workbench en términos de cómo uno se conectaría a un servidor invitado de Vagrant. De todas las respuestas, esta, aquí mismo, hizo que funcionara. PuPHPet manejó todas esas otras cosas por mí, por lo que todas esas cosas de configuración de Vagrant probablemente sean más para aquellas personas a las que les gusta configurar manualmente sus Vagrantfiles. Para las personas de PuPHPet, esta es la respuesta.
creaciones inigualables
Tuve que especificar la ruta del archivo de clave SSH al archivo de clave privada para el cuadro vagabundo: $HOME/project/.vagrant/machines/default/virtualbox/private_keyen Ubuntu 14.04
Francisco Quintero
También puede obtener los valores de configuración SSH desde el vagrant ssh-configcomando.
Tayler
2

Estos son los pasos que me funcionaron después de iniciar sesión en el cuadro:

Busque el archivo de configuración de 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

En Ubuntu 16, la ruta suele ser /etc/mysql/mysql.conf.d/mysqld.cnf

Cambie el archivo de configuración para bind-address:

Si existe, cambie el valor de la siguiente manera. Si no existe, agréguelo en cualquier lugar de la sección [mysqld].

bind-address = 0.0.0.0

Guarde sus cambios en el archivo de configuración y reinicie el servicio MySQL.

service mysql restart

Crear / otorgar acceso al usuario de la base de datos:

Conéctese a la base de datos MySQL como usuario root y ejecute los siguientes comandos SQL:

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

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

Esto funcionó para mí: Conéctese a MySQL en 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
fuente