Как подключиться к серверу Mysql внутри VirtualBox Vagrant?


93

Я установил новую машину VirtualBox с Vagrant, и внутри этой виртуальной машины я установил сервер Mysql. Как я могу подключиться к этому серверу за пределами виртуальной машины? Я уже перенаправляю порт 3306 Vagrantfile, но когда я пытаюсь подключиться к серверу mysql, он отвечает с ошибкой: «чтение начального пакета связи»

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

Можете ли вы поделиться большей частью своей конфигурации, в частности, параметрами сети (сколько, введите [bridged, NAT, ...]), а также снимком экрана переадресации порта, который вы сделали? Это также может быть проблема, связанная с брандмауэром на вашей виртуальной машине.
Goyuix

Ответы:


126

Убедитесь, что MySQL привязан к 0.0.0.0, а не к 127.0.0.1, иначе он не будет доступен извне.

Вы можете убедиться в этом, отредактировав файл my.conf и выполнив поиск bind-addressэлемента - вы хотите, чтобы он выглядел так bind-address = 0.0.0.0. Затем сохраните это и перезапустите mysql:

sudo service mysql restart

Если вы делаете это на производственном сервере, вы хотите знать о последствиях для безопасности, обсуждаемых здесь: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


Это определенно было в случае моей установки mysql 5.5. Из комментариев в mysql.conf, я думаю, что это зависит от версии - они используют закомментированную конфигурацию, упомянутую в других ответах.
пришвартовался

7
Вы можете автоматизировать этот шаг в файле начальной загрузки с помощью следующей команды (проверено на CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac

или просто закомментируйте bind-addressстрочку
xiaoyifang 05

9
Я понял Host '10.0.2.2' is not allowed to connect to this MySQL server. Но решено с помощью serverfault.com/a/486716/147813
CMCDragonkai

2
В дополнение к ссылке @CMCDragonkai serverfault (у меня там нет репутации, чтобы комментировать), эту команду можно использовать в чем-то вроде сценария Ansible для автоматизации предоставления прав 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

Войдите в свой ящик с помощью ssh vagrant@127.0.0.1 -p 2222(пароль vagrant)

Затем: sudo nano /etc/mysql/my.cnfи закомментируйте следующие строки с помощью #

#skip-external-locking 
#bind-address

сохранить и выйти

тогда: sudo service mysql restart

Затем вы можете подключиться через SSH к вашему серверу MySQL.


10
Я закомментировал "#" вместо ";"
Джей

3
Я должен привязать адрес и запустить это: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen

Спасибо, меня это беспокоило целую вечность. # skip-external-lockingрешил это!
Джек

18

Я недавно столкнулся с этой проблемой. Я использовал PuPHPet для создания конфигурации.

Чтобы подключиться к MySQL через SSH, "бродячий" пароль у меня не работал, вместо этого мне пришлось пройти аутентификацию через файл ключей SSH.

Для подключения к MySQL Workbench

Способ подключения

Стандартный TCP / IP через 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)

Проверить соединение.


Я сделал в основном то же самое для подключения к базе данных с помощью Phpstorm, но вместо PuPHPet я использовал Protobox.
null

17

Для тех, кто пытается сделать это с помощью mysql workbench или sequel pro, это входные данные:

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)

источник: https://coderwall.com/p/yzwqvg


1
Это было очень полезно! Мне вообще не пришлось настраивать адрес привязки с помощью виртуального ящика и пересылки ssh-агента
kasakka

1
Убедитесь, что вы удалили все открытые ключи из файла known_hosts вашего хост-компьютера, которые относятся к тому же хосту (IP-адресу). Это произойдет, если вы использовали другую виртуальную машину Vagrant с тем же IP-адресом
Джон Хадсон,

Вы также можете получить значения конфигурации SSH из vagrant ssh-configкоманды.
Тайлер

13

Что ж, поскольку ни один из приведенных ответов мне не помог, мне пришлось поискать больше и найти решение в этой статье.

И вкратце ответ таков:

Подключение к MySQL с помощью 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)>

Используя данный подход, я смог подключиться к базе данных mysql в бродяге с хост-машины Ubuntu с помощью MySQL Workbench, а также с помощью Valentina Studio.


Я использую Valentina, которая в основном представляет собой MySQL Workbench с точки зрения того, как можно подключиться к гостевому серверу Vagrant. Из всех ответов этот, прямо здесь, заставил его работать. Все остальное было сделано за меня с помощью PuPHPet, так что все, что касается конфигурации Vagrant, вероятно, больше для тех, кто любит вручную настраивать свои Vagrantfiles. Для людей PuPHPet это ответ.
непревзойденные

Мне пришлось указать путь к файлу ключей SSH к файлу закрытого ключа для бродячего ящика: $HOME/project/.vagrant/machines/default/virtualbox/private_keyв Ubuntu 14.04
Франциско Кинтеро,

Вы также можете получить значения конфигурации SSH из vagrant ssh-configкоманды.
Тайлер

2

Вот шаги, которые сработали для меня после входа в ящик:

Найдите файл конфигурации 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

В Ubuntu 16 путь обычно /etc/mysql/mysql.conf.d/mysqld.cnf

Измените файл конфигурации для адреса привязки:

Если он существует, измените значение следующим образом. Если его нет, добавьте его где-нибудь в разделе [mysqld].

bind-address = 0.0.0.0

Сохраните изменения в файле конфигурации и перезапустите службу MySQL.

service mysql restart

Создать / предоставить доступ пользователю базы данных:

Подключитесь к базе данных MySQL как пользователь root и выполните следующие команды SQL:

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

mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%';

1

Это сработало для меня: подключиться к MySQL в 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.