Come connettersi a Mysql Server all'interno di VirtualBox Vagrant?


93

Ho montato una nuova macchina VirtualBox con Vagrant e all'interno di quella VM ho installato Mysql Server. Come posso connettermi a quel server al di fuori della VM? Ho già inoltrato la porta 3306 del Vagrantfile, ma quando provo a connettermi al server mysql, viene risposto con l'errore: 'reading initial communication packet'

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

Puoi condividere più della tua configurazione, in particolare le opzioni di rete (quante, tipo [bridged, NAT, ...]) e uno screenshot dei port forward che hai fatto? Potrebbe anche essere un problema relativo al firewall sulla VM.
Goyuix

Risposte:


125

Assicurati che MySQL si leghi a 0.0.0.0 e non a 127.0.0.1 o non sarà accessibile dall'esterno della macchina

Puoi assicurarti questo modificando il tuo file my.conf e cercando l' bind-addresselemento - vuoi che assomigli bind-address = 0.0.0.0. Quindi salva questo e riavvia mysql:

sudo service mysql restart

Se lo stai facendo su un server di produzione, devi essere consapevole delle implicazioni sulla sicurezza, discusse qui: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


Questo è stato sicuramente il caso della mia installazione di mysql 5.5. Dai commenti in mysql.conf, penso che varys per versione - usano per avere la configurazione commentata menzionata in altre risposte.
ormeggia il

7
Puoi automatizzare questo passaggio nel tuo file bootstrap con il seguente comando (testato su CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac

o semplicemente commentare la bind-addresslinea
xiaoyifang

9
Ho capito Host '10.0.2.2' is not allowed to connect to this MySQL server. Ma risolto con serverfault.com/a/486716/147813
CMCDragonkai

2
Oltre al collegamento serverfault @CMCDragonkai (non ho la reputazione di commentare), questo comando può essere utilizzato in qualcosa come uno script Ansible per automatizzare la concessione dei permessi dell'utente 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

Accedi alla tua casella con ssh vagrant@127.0.0.1 -p 2222(password vagrant)

Quindi: sudo nano /etc/mysql/my.cnfe commenta le seguenti righe con #

#skip-external-locking 
#bind-address

salvalo ed esci

poi: sudo service mysql restart

Quindi puoi connetterti tramite SSH al tuo server MySQL.


10
Ho commentato con "#" invece di ";"
Jay

3
Devo associare l'indirizzo ed eseguire questo: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen

Grazie, questo mi ha turbato per anni. # skip-external-lockingrisolto!
Jack

18

Mi sono imbattuto in questo problema di recente. Ho usato PuPHPet per generare una configurazione.

Per connettermi a MySQL tramite SSH, la password "vagabonda" non funzionava per me, invece ho dovuto autenticarmi tramite il file della chiave SSH.

Per connetterti con MySQL Workbench

Metodo di connessione

TCP / IP standard su 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)

Verifica la connessione.


Fondamentalmente ho fatto la stessa cosa per connettermi al database con Phpstorm, ma invece di PuPHPet ho usato Protobox.
null

17

Per chiunque provi a farlo utilizzando mysql workbench o sequel pro questi sono gli input:

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)

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


1
Questo è stato molto utile! Non ho dovuto modificare l'indirizzo di bind utilizzando la casella virtuale e l'inoltro dell'agente ssh
kasakka

1
Assicurati di rimuovere tutte le chiavi pubbliche dal file known_hosts della tua macchina host che sono per lo stesso host (indirizzo IP). Questo sarà successo se stavi usando un'altra VM Vagrant con lo stesso indirizzo IP
Jon Hudson

Puoi anche ottenere i valori di configurazione SSH dal vagrant ssh-configcomando.
Tayler

13

Bene, poiché nessuna delle risposte fornite mi ha aiutato, ho dovuto cercare di più e ho trovato la soluzione in questo articolo.

E la risposta in poche parole è la seguente:

Connessione a MySQL utilizzando 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)>

Utilizzando un determinato approccio, sono stato in grado di connettermi al database mysql in vagabondo dalla macchina host Ubuntu utilizzando MySQL Workbench e anche utilizzando Valentina Studio.


Sto usando Valentina, che è fondamentalmente MySQL Workbench in termini di come ci si connette a un server guest Vagrant. Di tutte le risposte, questa, proprio qui, l'ha fatta funzionare. Tutte le altre cose sono state gestite per me da PuPHPet, quindi tutta quella roba di configurazione di Vagrant è probabilmente più per quelle persone a cui piace configurare manualmente i propri file Vagrant. Per le persone di PuPHPet questa è la risposta.
creazioni impareggiabili il

Ho dovuto specificare il percorso del file chiave SSH per il file della chiave privata per la scatola vagabonda: $HOME/project/.vagrant/machines/default/virtualbox/private_keyin Ubuntu 14.04
Francisco Quintero

Puoi anche ottenere i valori di configurazione SSH dal vagrant ssh-configcomando.
Tayler

2

Ecco i passaggi che hanno funzionato per me dopo aver effettuato l'accesso alla casella:

Individua il file di configurazione di 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

Su Ubuntu 16, il percorso è in genere /etc/mysql/mysql.conf.d/mysqld.cnf

Modifica il file di configurazione per l'indirizzo di associazione:

Se esiste, modificare il valore come segue. Se non esiste, aggiungilo ovunque nella sezione [mysqld].

bind-address = 0.0.0.0

Salva le modifiche nel file di configurazione e riavvia il servizio MySQL.

service mysql restart

Crea / concedi l'accesso all'utente del database:

Connettiti al database MySQL come utente root ed esegui i seguenti comandi SQL:

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

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

1

Questo ha funzionato per me: connettersi a MySQL in 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.