J'essaie de configurer la redirection de port dans Vagrantfile pour se connecter à l'invité mysqld à partir du système hôte, mais je reçois l'erreur reading initial communication packet
.
Vagrantfile (hôte):
config.vm.network "forwarded_port", guest: 80, Host: 8080
config.vm.network "forwarded_port", guest: 3306, Host: 3309
my.ini (invité):
bind-address = 127.0.0.1
La transmission 8080 fonctionne à merveille.
mysql -h127.0.0.1 -uroot -p
de guest fonctionne également.
mysql -h127.0.0.1 -P 3309 -uroot -p
à partir des résultats de l'hôte avec l'erreur reading initial communication packet
.
Lorsque je fais un telnet depuis l'hôte, la connexion se ferme instantanément:
$ telnet localhost 3309
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign Host.
La redirection de port fonctionne lorsque je ssh dans la boîte vagrant de l'hôte:
$ssh [email protected] -p 2222 -L3308:localhost:3306
Ensuite, je peux me connecter sans problème à partir de l'hôte mysql -h127.0.0.1 -P3308 -uroot -p
, que j'utilise comme solution temporaire.
a finalement réussi à le faire fonctionner -
éditez le fichier /etc/mysql/my.cnf
et assurez-vous que
bind-address = 0.0.0.0
#bind-address ...
Vous devrez peut-être l'ajouter à la section mysqld du fichier my.cnf:
[mysqld]
bind-address = 0.0.0.0
assurez-vous de redémarrer votre serveur mysql après le changement
$ Sudo service mysql restart
Ensuite, vous pouvez vous connecter à partir de votre hôte - j'ai donc eu une erreur comme
$ 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
donc je suis revenu à l'invité et ai fait
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)
Ensuite, je n'ai eu aucun problème pour me connecter à partir de la machine hôte
$ 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)
La première réponse est correcte mais pas suffisante. Lorsque je connecte MySQL, le message d'erreur suivant s'affiche:
L'hôte '10 .0.2.2 'n'est pas autorisé à se connecter à ce serveur MySQL
Solution:
créer l'utilisateur 'root'@'10.0.2.2' identifié par 'mot de passe';
accorder tous les privilèges sur. à 'root'@'10.0.2.2' avec option de subvention;
privilèges de chasse;
aha, tous les problèmes sont résolus,
Personnellement, je ne me soucie pas de modifier MySQL pour le développement. Les boîtes Vagrant - cela prend du temps et est difficile à écrire dans un approvisionneur, ce qui signifie que vous devez le faire à la main chaque fois que vous vagrany destroy
ou qu'un nouveau développeur commence à contribuer. Au lieu de cela, je me connecte via le tunnel SSH, ce qui est rendu très facile grâce au fichier private_key
généré par Vagrant. Aucun ajustement supplémentaire post-installation nécessaire.
Suivez ces étapes pour créer un tunnel SSH avec SequelPro, MySql Workbench ou tout autre client prenant en charge la connectivité SSH:
127.0.0.1
(cross-os plus prévisible)root
et le mot de passe est défini/créé dans le provisioner (voir l'extrait de code ci-dessous)Vagrant
private_key
pour la machine Vagrant, situé dans .vagrant/machines/default/virtualbox
à la racine de votre projet VM; notez que sur la plupart des répertoires this du système d'exploitation, et que tous commençant par .
sont cachésPour automatiser l'installation et la création du mot de passe root, ajoutez ceci à votre fichier de script de provisioner Vagrant (config.vm.provision
dans Vagrantfile), communément appelé 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
J'espère que cela aide à sauver du temps à quelqu'un d'autre!