Jak połączyć się z serwerem MySQL wewnątrz VirtualBox Vagrant?

93

Zamontowałem nową maszynę VirtualBox z Vagrantem, a wewnątrz tej maszyny zainstalowałem Mysql Server. Jak mogę połączyć się z tym serwerem poza maszyną wirtualną? Przekierowałem już port 3306 pliku Vagrantfile, ale kiedy próbuję połączyć się z serwerem mysql, odpowiada on z błędem: 'reading initial communication packet'

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
rizidoro
źródło
Czy możesz udostępnić więcej swojej konfiguracji, w szczególności opcji sieciowych (ile, wpisz [most, NAT, ...]), a także zrzut ekranu przedstawiający przekierowanie portów? Może to być również problem związany z zaporą ogniową na Twojej maszynie wirtualnej.
Goyuix

Odpowiedzi:

126

Upewnij się, że MySQL wiąże się z 0.0.0.0, a nie 127.0.0.1, w przeciwnym razie nie będzie dostępny z zewnątrz maszyny

Możesz to zapewnić, edytując plik my.conf i wyszukując bind-addresselement - chcesz, aby wyglądał bind-address = 0.0.0.0. Następnie zapisz to i uruchom ponownie mysql:

sudo service mysql restart

Jeśli robisz to na serwerze produkcyjnym, chcesz być świadomy konsekwencji dla bezpieczeństwa, omówionych tutaj: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0

Dror Bereznitsky
źródło
Tak było z pewnością w przypadku mojej instalacji mysql 5.5. Sądząc po komentarzach w mysql.conf, wydaje mi się, że różni się to w zależności od wersji - używają wykomentowanej konfiguracji wspomnianej w innych odpowiedziach.
zacumuje
7
Możesz zautomatyzować ten krok w swoim pliku bootstrap za pomocą następującego polecenia (testowane na CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac
lub po prostu bind-address
zakomentuj
9
Rozumiem Host '10.0.2.2' is not allowed to connect to this MySQL server. Ale rozwiązany przez serverfault.com/a/486716/147813
CMCDragonkai,
2
Oprócz linku do błędu serwera @CMCDragonkai (nie mam tam reputacji do komentowania), to polecenie może być użyte w czymś takim jak skrypt Ansible, aby zautomatyzować nadawanie uprawnień użytkownikowi 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

Zaloguj się do swojej skrzynki za pomocą ssh [email protected] -p 2222(hasło vagrant)

Następnie: sudo nano /etc/mysql/my.cnfi zakomentuj następujące wiersze za pomocą #

#skip-external-locking 
#bind-address

zapisz i wyjdź

następnie: sudo service mysql restart

Następnie możesz połączyć się przez SSH z serwerem MySQL.

Youri van den Bogert
źródło
10
Skomentowałem za pomocą „#” zamiast „;”
Jay
3
Muszę powiązać adres i uruchomić to: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen
Dziękuję, męczyło mnie to od wieków. # skip-external-lockingrozwiązałem to!
Jack,
18

Niedawno natknąłem się na ten problem. Użyłem PuPHPet do wygenerowania pliku config.

Aby połączyć się z MySQL przez SSH, hasło „vagrant” nie działało, zamiast tego musiałem uwierzytelnić się za pomocą pliku klucza SSH.

Aby połączyć się z MySQL Workbench

Metoda połączenia

Standardowy protokół TCP / IP przez 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)

Przetestuj połączenie.

radiohub
źródło
Zrobiłem zasadniczo to samo, aby połączyć się z bazą danych za pomocą Phpstorm, ale zamiast PuPHPet użyłem Protobox.
null
17

Dla każdego, kto próbuje to zrobić za pomocą środowiska roboczego mysql lub sequel pro, oto dane wejściowe:

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)

źródło: https://coderwall.com/p/yzwqvg

Sarmen B.
źródło
1
To było bardzo pomocne! W ogóle nie musiałem dostosowywać adresu powiązania za pomocą wirtualnej skrzynki i przekazywania agentów ssh
kasakka
1
Upewnij się, że usunąłeś wszystkie klucze publiczne z pliku znane_hosts hosta, które są przeznaczone dla tego samego hosta (adresu IP). Stanie się tak, jeśli używasz innej maszyny wirtualnej Vagrant z tym samym adresem IP
Jon Hudson
Możesz również pobrać wartości konfiguracyjne SSH z vagrant ssh-configpolecenia.
Tayler
13

Cóż, ponieważ żadna z podanych odpowiedzi nie pomogła mi, musiałem szukać więcej i znalazłem rozwiązanie w tym artykule.

Odpowiedź w skrócie jest następująca:

Łączenie się z MySQL za pomocą 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)>

Korzystając z tego podejścia, mogłem połączyć się z bazą danych mysql w vagrant z komputera hosta Ubuntu za pomocą MySQL Workbench, a także za pomocą Valentina Studio.

AbstractVoid
źródło
Używam Valentiny, która jest w zasadzie MySQL Workbench pod względem sposobu łączenia się z serwerem gościa Vagrant. Ze wszystkich odpowiedzi, ta tutaj sprawiła, że ​​zadziałało. Wszystkimi innymi rzeczami zajął się dla mnie PuPHPet, więc cała ta konfiguracja Vagrant jest prawdopodobnie bardziej dla tych, którzy lubią ręcznie konfigurować swoje pliki Vagrantfiles. Dla ludzi PuPHPet to jest odpowiedź.
unrivaledcreations
Musiałem określić ścieżkę pliku klucza SSH do pliku klucza prywatnego dla skrzynki włóczęgi: $HOME/project/.vagrant/machines/default/virtualbox/private_keyw Ubuntu 14.04
Francisco Quintero,
Możesz również pobrać wartości konfiguracyjne SSH z vagrant ssh-configpolecenia.
Tayler
2

Oto kroki, które zadziałały po zalogowaniu się do skrzynki:

Zlokalizuj plik konfiguracyjny 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

W systemie Ubuntu 16 ścieżka to zazwyczaj /etc/mysql/mysql.conf.d/mysqld.cnf

Zmień plik konfiguracyjny dla adresu powiązania:

Jeśli istnieje, zmień wartość w następujący sposób. Jeśli nie istnieje, dodaj go w dowolnym miejscu w sekcji [mysqld].

bind-address = 0.0.0.0

Zapisz zmiany w pliku konfiguracyjnym i uruchom ponownie usługę MySQL.

service mysql restart

Utwórz / Przyznaj dostęp do użytkownika bazy danych:

Połącz się z bazą danych MySQL jako użytkownik root i uruchom następujące polecenia SQL:

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

mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%';
Rajkaran Mishra
źródło
1

To zadziałało dla mnie: Połącz się z MySQL w 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
źródło