Comment se connecter à Mysql Server dans VirtualBox Vagrant?

93

J'ai monté une nouvelle machine VirtualBox avec Vagrant, et à l'intérieur de cette VM, j'ai installé Mysql Server. Comment puis-je me connecter à ce serveur en dehors de la VM? Je transfère déjà le port 3306 du Vagrantfile, mais quand j'essaye de me connecter au serveur mysql, il se remet avec l'erreur: 'reading initial communication packet'

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
rizidoro
la source
Pouvez-vous partager plus de votre configuration, en particulier les options de mise en réseau (combien, type [ponté, NAT, ...]) ainsi qu'une capture d'écran des transferts de port que vous avez effectués? Il peut également s'agir d'un problème lié au pare-feu sur votre VM.
Goyuix

Réponses:

125

Assurez-vous que MySQL se lie à 0.0.0.0 et non à 127.0.0.1 ou il ne sera pas accessible de l'extérieur de la machine

Vous pouvez vous en assurer en éditant votre fichier my.conf et en recherchant l' bind-addressélément auquel vous voulez qu'il ressemble bind-address = 0.0.0.0. Ensuite, enregistrez ceci et redémarrez mysql:

sudo service mysql restart

Si vous faites cela sur un serveur de production, vous voulez être conscient des implications de sécurité, discutées ici: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0

Dror Bereznitsky
la source
C'était définitivement le cas pour mon installation mysql 5.5. D'après les commentaires dans mysql.conf, je pense que cela varie selon la version - ils utilisent pour avoir la configuration commentée mentionnée dans d'autres réponses.
amarré
7
Vous pouvez automatiser cette étape dans votre fichier d'amorçage avec la commande suivante (testée sur CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac
ou tout simplement commenter la bind-addressligne
xiaoyifang
9
Je comprends ça Host '10.0.2.2' is not allowed to connect to this MySQL server. Mais résolu avec serverfault.com/a/486716/147813
CMCDragonkai
2
En plus du lien serverfault @CMCDragonkai (je n'ai pas de réputation là-bas pour commenter), cette commande peut être utilisée dans quelque chose comme un script Ansible pour automatiser l'octroi des autorisations des utilisateurs 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

Connectez-vous à votre box avec ssh [email protected] -p 2222(mot de passe vagrant)

Ensuite: sudo nano /etc/mysql/my.cnfet commentez les lignes suivantes avec #

#skip-external-locking 
#bind-address

enregistrez-le et quittez

puis: sudo service mysql restart

Ensuite, vous pouvez vous connecter via SSH à votre serveur MySQL.

Youri van den Bogert
la source
10
J'ai commenté avec "#" au lieu de ";"
Jay
3
Je dois lier l'adresse et exécuter ceci: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen
Merci, cela m'a troublé pendant des siècles. # skip-external-lockingrésolu!
Jack
18

Je suis tombé sur ce problème récemment. J'ai utilisé PuPHPet pour générer une configuration.

Pour me connecter à MySQL via SSH, le mot de passe "vagrant" ne fonctionnait pas pour moi, à la place j'ai dû m'authentifier via le fichier de clé SSH.

Pour vous connecter à MySQL Workbench

Méthode de connexion

TCP / IP standard sur 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)

Testez la connexion.

radiohub
la source
J'ai fait essentiellement la même chose pour me connecter à la base de données avec Phpstorm, mais au lieu de PuPHPet, j'ai utilisé Protobox.
nul
17

Pour tous ceux qui essaient de le faire en utilisant mysql workbench ou sequel pro, voici les entrées:

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)

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

Sarmen B.
la source
1
Cela a été très utile! Je n'ai pas eu à ajuster l'adresse de liaison du tout à l'aide de la boîte virtuelle et du transfert d'agent ssh
kasakka
1
Assurez-vous de supprimer toutes les clés publiques du fichier known_hosts de votre machine hôte qui sont pour le même hôte (adresse IP). Cela se sera produit si vous avez utilisé une autre VM Vagrant avec la même adresse IP
Jon Hudson
Vous pouvez également obtenir les valeurs de configuration SSH à partir de la vagrant ssh-configcommande.
Tayler
13

Eh bien, comme aucune des réponses données ne m'a aidé, j'ai dû chercher davantage et trouver une solution dans cet article.

Et la réponse en un mot est la suivante:

Connexion à MySQL à l'aide de 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)>

En utilisant une approche donnée, j'ai pu me connecter à la base de données mysql dans vagrant à partir de la machine hôte Ubuntu en utilisant MySQL Workbench et également en utilisant Valentina Studio.

RésuméVoid
la source
J'utilise Valentina, qui est fondamentalement MySQL Workbench en termes de connexion à un serveur invité Vagrant. De toutes les réponses, celle-ci, ici même, l'a fait fonctionner. Tous ces autres trucs ont été gérés pour moi par PuPHPet, donc tout ce truc de configuration de Vagrant est probablement plus pour ceux qui aiment configurer manuellement leurs Vagrantfiles. Pour les gens de PuPHPet, c'est la réponse.
uncivaledcreations
J'ai dû spécifier le chemin d'accès du fichier de clé SSH au fichier de clé privée de la boîte vagrant: $HOME/project/.vagrant/machines/default/virtualbox/private_keydans Ubuntu 14.04
Francisco Quintero
Vous pouvez également obtenir les valeurs de configuration SSH à partir de la vagrant ssh-configcommande.
Tayler
2

Voici les étapes qui ont fonctionné pour moi après la connexion à la boîte:

Localisez le fichier de configuration 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

Sur Ubuntu 16, le chemin est généralement /etc/mysql/mysql.conf.d/mysqld.cnf

Modifiez le fichier de configuration pour l'adresse de liaison:

S'il existe, modifiez la valeur comme suit. S'il n'existe pas, ajoutez-le n'importe où dans la section [mysqld].

bind-address = 0.0.0.0

Enregistrez vos modifications dans le fichier de configuration et redémarrez le service MySQL.

service mysql restart

Créer / accorder l'accès à l'utilisateur de la base de données:

Connectez-vous à la base de données MySQL en tant qu'utilisateur root et exécutez les commandes SQL suivantes:

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

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

Cela a fonctionné pour moi: connectez - vous à MySQL dans 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
la source