web-dev-qa-db-fra.com

Transfert de port vagabond pour Mysql

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.

13
Alex Blex

a finalement réussi à le faire fonctionner -

éditez le fichier /etc/mysql/my.cnf et assurez-vous que

  • vous avez bind-address = 0.0.0.0
  • ou vous commentez la ligne #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)
21
Frédéric Henri

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,

2
LiamHsia

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:

  • Choisissez l'option de connexion SSH
  • Le "hôte" en mode SSH devient localhost ou plus précisément 127.0.0.1 (cross-os plus prévisible)
  • Le nom d'utilisateur/mot de passe est le nom d'utilisateur/mot de passe de la base de données. Pour le développement, vous pouvez simplement utiliser root et le mot de passe est défini/créé dans le provisioner (voir l'extrait de code ci-dessous)
  • Le nom d'utilisateur SSH est Vagrant
  • Pas de mot de passe SSH - utilisez simplement le 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és

Pour 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!

1
Scott Byers