Wie verbinde ich mich mit MySQL Server in VirtualBox Vagrant?

93

Ich habe eine neue VirtualBox-Maschine mit Vagrant gemountet und in dieser VM MySQL Server installiert. Wie kann ich eine Verbindung zu diesem Server außerhalb der VM herstellen? Ich leite den Port 3306 der Vagrant-Datei bereits weiter, aber wenn ich versuche, eine Verbindung zum MySQL-Server herzustellen, wird erneut der Fehler angezeigt: "Erstes Kommunikationspaket lesen".

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
Rizidoro
quelle
Können Sie mehr von Ihrer Konfiguration freigeben, insbesondere die Netzwerkoptionen (wie viele, geben Sie [Bridged, NAT, ...] ein) sowie einen Screenshot der von Ihnen vorgenommenen Portweiterleitungen? Möglicherweise handelt es sich auch um ein Firewall-Problem auf Ihrer VM.
Goyuix

Antworten:

125

Stellen Sie sicher, dass MySQL an 0.0.0.0 und nicht an 127.0.0.1 gebunden ist. Andernfalls kann von außerhalb des Computers nicht darauf zugegriffen werden

Sie können dies sicherstellen, indem Sie Ihre my.conf-Datei bearbeiten und nach dem bind-addressElement suchen - Sie möchten, dass es so aussieht bind-address = 0.0.0.0. Speichern Sie dies und starten Sie mysql neu:

sudo service mysql restart

Wenn Sie dies auf einem Produktionsserver tun, möchten Sie sich der Auswirkungen auf die Sicherheit bewusst sein, die hier erläutert werden: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0

Dror Bereznitsky
quelle
Dies war definitiv der Fall für meine MySQL 5.5-Installation. Aus den Kommentaren in mysql.conf geht hervor, dass sie je nach Version unterschiedlich sind. Sie verwenden die auskommentierte Konfiguration, die in anderen Antworten erwähnt wird.
festgemacht
7
Sie können diesen Schritt in Ihrer Bootstrap-Datei mit dem folgenden Befehl automatisieren (unter CentOS getestet):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
Ronan_Mac
oder kommentieren Sie einfach die bind-addressZeile
Xiaoyifang
9
Ich verstehe das Host '10.0.2.2' is not allowed to connect to this MySQL server. Aber gelöst mit serverfault.com/a/486716/147813
CMCDragonkai
2
Zusätzlich zum @ CMCDragonkai-Serverfehler-Link (ich habe dort keinen Ruf zum Kommentieren) kann dieser Befehl in so etwas wie einem Ansible-Skript verwendet werden, um das Erteilen von Root-Benutzerberechtigungen zu automatisieren: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

Melden Sie sich mit ssh [email protected] -p 2222(Passwort vagrant) in Ihrer Box an.

Dann: sudo nano /etc/mysql/my.cnfund kommentieren Sie die folgenden Zeilen mit # aus

#skip-external-locking 
#bind-address

Speichern Sie es und beenden Sie es

dann: sudo service mysql restart

Anschließend können Sie über SSH eine Verbindung zu Ihrem MySQL-Server herstellen.

Youri van den Bogert
quelle
10
Ich habe mit "#" statt ";"
Jay
3
Ich muss die Adresse binden und GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
Ein Nguyen
Danke, das hat mich ewig beunruhigt. # skip-external-lockingIch habe es gelöst!
Jack
18

Ich bin kürzlich auf dieses Problem gestoßen. Ich habe PuPHPet verwendet, um eine Konfiguration zu generieren.

Um über SSH eine Verbindung zu MySQL herzustellen, funktionierte das "vagabundierende" Passwort bei mir nicht, stattdessen musste ich mich über die SSH-Schlüsseldatei authentifizieren.

So stellen Sie eine Verbindung mit MySQL Workbench her

Verbindungsmethode

Standard TCP / IP über 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)

Testen Sie die Verbindung.

Radiohub
quelle
Ich habe im Grunde das Gleiche getan, um mit Phpstorm eine Verbindung zur Datenbank herzustellen, aber anstelle von PuPHPet habe ich Protobox verwendet.
null
17

Für alle, die dies mit MySQL Workbench oder Sequel Pro versuchen, sind dies die Eingaben:

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)

Quelle: https://coderwall.com/p/yzwqvg

Sarmen B.
quelle
1
Das war sehr hilfreich! Ich musste die Bindungsadresse überhaupt nicht mithilfe der Weiterleitung von virtuellen Boxen und SSH-Agenten
anpassen
1
Stellen Sie sicher, dass Sie alle öffentlichen Schlüssel aus der Datei unknown_hosts Ihres Hostcomputers entfernen, die für denselben Host (IP-Adresse) bestimmt sind. Dies ist passiert, wenn Sie eine andere Vagrant-VM mit derselben IP-Adresse verwendet haben
Jon Hudson
Sie können die SSH-Konfigurationswerte auch über den vagrant ssh-configBefehl abrufen .
Tayler
13

Nun, da mir keine der Antworten geholfen hat, musste ich mehr suchen und fand in diesem Artikel eine Lösung .

Und die Antwort auf den Punkt gebracht lautet wie folgt:

Herstellen einer Verbindung zu MySQL mithilfe der 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)>

Mit einem bestimmten Ansatz konnte ich mit MySQL Workbench und Valentina Studio vom Host-Ubuntu-Computer aus eine Verbindung zur MySQL-Datenbank herstellen.

AbstractVoid
quelle
Ich verwende Valentina, im Grunde genommen MySQL Workbench, um eine Verbindung zu einem Vagrant-Gastserver herzustellen. Von allen Antworten hat diese hier funktioniert. Das ganze andere Zeug wurde von PuPHPet für mich erledigt, also ist das ganze Vagrant-Konfigurationsmaterial wahrscheinlich eher für diejenigen gedacht, die ihre Vagrant-Dateien manuell konfigurieren möchten. Für PuPHPet-Leute ist dies die Antwort.
konkurrenzlose
Ich musste den Pfad der SSH-Schlüsseldatei zur privaten Schlüsseldatei für die Vagrant-Box angeben: $HOME/project/.vagrant/machines/default/virtualbox/private_keyin Ubuntu 14.04
Francisco Quintero
Sie können die SSH-Konfigurationswerte auch über den vagrant ssh-configBefehl abrufen .
Tayler
2

Hier sind die Schritte, die für mich nach dem Anmelden in der Box funktioniert haben:

Suchen Sie die MySQL-Konfigurationsdatei:

$ 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

Unter Ubuntu 16 ist der Pfad normalerweise /etc/mysql/mysql.conf.d/mysqld.cnf

Konfigurationsdatei für Bindungsadresse ändern:

Wenn es existiert, ändern Sie den Wert wie folgt. Wenn es nicht vorhanden ist, fügen Sie es an einer beliebigen Stelle im Abschnitt [mysqld] hinzu.

bind-address = 0.0.0.0

Speichern Sie Ihre Änderungen in der Konfigurationsdatei und starten Sie den MySQL-Dienst neu.

service mysql restart

Erstellen / Gewähren des Zugriffs für Datenbankbenutzer:

Stellen Sie als Root-Benutzer eine Verbindung zur MySQL-Datenbank her und führen Sie die folgenden SQL-Befehle aus:

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

mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%';
Rajkaran Mishra
quelle
1

Das hat bei mir funktioniert: Stellen Sie in Vagrant eine Verbindung zu MySQL her

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
quelle