Переадресация портов Vagrant для Mysql
Я пытаюсь настроить переадресацию портов в Vagrantfile для подключения к гостевому mysqld из хост-системы, но получить reading initial communication packet
ошибка.
Ведущий: Йосемити, гость: верный, бродяга 1.7.4
файл Vagrantfile(хозяин):
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 3309
мой.Ини(гость):
bind-address = 127.0.0.1
8080 переадресация работает как шарм.
mysql -h127.0.0.1 -uroot -p
от гостя также работает.
mysql -h127.0.0.1 -P 3309 -uroot -p
из результатов хоста с reading initial communication packet
ошибка.
когда я telnet от хоста, соединение мгновенно закрывается:
$ telnet localhost 3309
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
переадресация портов работает, когда я ssh в vagrant box от хоста:
$ssh vagrant@127.0.0.1 -p 2222 -L3308:localhost:3306
тогда я могу подключиться с хоста mysql -h127.0.0.1 -P3308 -uroot -p
без проблем, которые я использую в качестве временного обходного пути.
3 ответов
наконец-то смог заставить его работать -
редактировать /etc/mysql/my.cnf
файл и убедитесь, либо
- вы
bind-address = 0.0.0.0
- или вы комментируете строку
#bind-address ...
вам может потребоваться добавить его в раздел mysqld my.cnf файл:
[mysqld]
bind-address = 0.0.0.0
обязательно перезагрузите сервер mysql после изменения
$ sudo service mysql restart
затем вы можете подключиться с вашего хоста-поэтому у меня сначала была ошибка как
$ 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
Итак, я вернулся к гостю и сделал
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)
тогда у меня не было проблем с подключением с хост-машины
$ 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)
первый ответ правильный, но недостаточно.когда я подключаю MySQL, я получаю ошибку:
хост '10.0.2.2' не разрешен для подключения к этому серверу MySQL
устранение:
создать пользователя 'root' @ '10.0.2.2', идентифицированного по 'password';
все привилегии на . в 'root' @ '10.0.2.2' с опцией предоставления;
flush привилегии;
ага, все проблемы решено,
лично я не беспокоюсь об изменении MySQL для разработки Vagrant boxes - это отнимает много времени и трудно писать в provisioner, то есть вы должны делать это вручную каждый раз, когда вы vagrany destroy
или новый разработчик начинает вносить свой вклад. Вместо этого я подключаюсь через SSH-туннель, который очень прост, используя генерируемый Vagrant . Никаких дополнительных настроек после установки не требуется.
выполните следующие действия для SSH-туннеля с SequelPro, MySQL Workbench или любым другим клиент, поддерживающий SSH-соединение:
- выберите опцию подключения SSH
- "Хост" в режиме SSH становится localhost или конкретно
127.0.0.1
(более предсказуемый кросс-ОС) - логин/пароль-имя пользователя базы данных и пароль. Для разработки вы можете просто использовать
root
и пароль определен / создан в provisioner (см. Фрагмент ниже) - имя пользователя SSH
Vagrant
- нет пароля SSH-просто используйте
private_key
для бродячей машины вместо этого, расположенной в.vagrant/machines/default/virtualbox
в корне вашего проекта VM; обратите внимание, что на большинстве ОС этот каталог, и все начиная с.
скрытый
чтобы автоматизировать установку и создание пароля root, добавьте это в файл сценария Vagrant provisioner (config.vm.provision
в Vagrantfile), обычно называемый 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
надеюсь, это поможет сэкономить кому-то еще некоторое время!