Bagaimana cara terhubung ke Server Mysql di dalam VirtualBox Vagrant?


93

Saya memasang Mesin VirtualBox baru dengan Vagrant, dan di dalam VM itu saya menginstal Server Mysql. Bagaimana saya bisa terhubung ke server di luar vm? Saya sudah meneruskan port 3306 dari Vagrantfile, tetapi ketika saya mencoba untuk menyambung ke server mysql, itu merespons dengan kesalahan: 'membaca paket komunikasi awal'

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

Dapatkah Anda membagikan lebih banyak konfigurasi Anda, khususnya opsi jaringan (berapa banyak, ketik [bridged, NAT, ...]) serta tangkapan layar dari port forward yang Anda lakukan? Mungkin juga merupakan masalah terkait firewall di VM Anda.
Goyuix

Jawaban:


126

Pastikan MySQL mengikat 0.0.0.0 dan bukan 127.0.0.1 atau itu tidak akan dapat diakses dari luar mesin

Anda dapat memastikan ini dengan mengedit file my.conf Anda dan mencari bind-addressitem - Anda ingin terlihat seperti itu bind-address = 0.0.0.0. Kemudian simpan ini dan mulai ulang mysql:

sudo service mysql restart

Jika Anda melakukan ini di server produksi, Anda ingin mengetahui implikasi keamanan, yang dibahas di sini: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


Ini pasti kasus untuk instalasi mysql 5.5 saya. Dari komentar di mysql.conf, saya pikir itu bervariasi menurut versi - mereka menggunakan konfigurasi komentar yang disebutkan dalam jawaban lain.
ditambatkan

7
Anda dapat mengotomatiskan langkah ini di file bootstrap Anda dengan perintah berikut (diuji di CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac

atau hanya mengomentari bind-addressbaris
xiaoyifang

9
Saya mengerti Host '10.0.2.2' is not allowed to connect to this MySQL server. Tetapi diselesaikan dengan serverfault.com/a/486716/147813
CMCDragonkai

2
Selain tautan default server @CMCDragonkai (saya tidak memiliki reputasi di sana untuk berkomentar), perintah ini dapat digunakan dalam sesuatu seperti skrip Ansible untuk mengotomatiskan pemberian izin pengguna 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

Masuk ke kotak Anda dengan ssh vagrant@127.0.0.1 -p 2222(kata sandi gelandangan)

Kemudian: sudo nano /etc/mysql/my.cnfdan komentari baris berikut dengan #

#skip-external-locking 
#bind-address

simpan & keluar

kemudian: sudo service mysql restart

Kemudian Anda dapat terhubung melalui SSH ke server MySQL Anda.


10
Saya berkomentar dengan "#", bukan ";"
Jay

3
Saya harus mengikat alamat dan menjalankan ini: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen

Terima kasih, ini menggangguku selama berabad-abad. # skip-external-lockingmenyelesaikannya!
Jack

18

Saya menemukan masalah ini baru-baru ini. Saya menggunakan PuPHPet untuk membuat konfigurasi.

Untuk terhubung ke MySQL melalui SSH, kata sandi "gelandangan" tidak berfungsi untuk saya, sebagai gantinya saya harus mengautentikasi melalui file kunci SSH.

Untuk terhubung dengan MySQL Workbench

Metode koneksi

TCP / IP standar melalui 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)

Uji koneksi.


Saya pada dasarnya melakukan hal yang sama untuk menyambung ke database dengan Phpstorm, tetapi alih-alih PuPHPet saya menggunakan Protobox.
nol

17

Bagi siapa pun yang mencoba melakukan ini menggunakan meja kerja mysql atau sekuel pro, ini adalah inputnya:

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)

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


1
Ini sangat membantu! Saya tidak perlu menyesuaikan alamat-bind sama sekali menggunakan kotak virtual dan penerusan agen ssh
kasakka

1
Pastikan Anda menghapus semua kunci publik dari file known_hosts mesin host Anda yang untuk host yang sama (Alamat IP). Ini akan terjadi jika Anda telah menggunakan VM Vagrant lain dengan alamat IP yang sama
Jon Hudson

Anda juga bisa mendapatkan nilai konfigurasi SSH dari vagrant ssh-configperintah.
Tayler

13

Nah, karena tidak satu pun dari balasan yang diberikan membantu saya, saya harus melihat lebih banyak, dan menemukan solusi dalam artikel ini .

Dan jawabannya secara singkat adalah sebagai berikut:

Menghubungkan ke MySQL menggunakan 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)>

Dengan menggunakan pendekatan yang diberikan, saya dapat terhubung ke database mysql di gelandangan dari mesin Ubuntu host menggunakan MySQL Workbench dan juga menggunakan Valentina Studio.


Saya menggunakan Valentina, yang pada dasarnya adalah MySQL Workbench dalam hal bagaimana seseorang akan terhubung ke server tamu Vagrant. Dari semua jawaban, yang ini, di sini, berhasil. Semua hal lain itu ditangani untuk saya oleh PuPHPet, jadi semua hal konfigurasi Vagrant itu mungkin lebih untuk orang-orang yang suka mengkonfigurasi Vagrantfiles mereka secara manual. Bagi orang-orang PuPHPet inilah jawabannya.
tak tertandingi

Saya harus menentukan jalur File Kunci SSH ke file kunci pribadi untuk kotak gelandangan: $HOME/project/.vagrant/machines/default/virtualbox/private_keydi Ubuntu 14.04
Francisco Quintero

Anda juga bisa mendapatkan nilai konfigurasi SSH dari vagrant ssh-configperintah.
Tayler

2

Berikut adalah langkah-langkah yang berhasil untuk saya setelah masuk ke kotak:

Temukan file konfigurasi 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

Di Ubuntu 16, jalurnya biasanya /etc/mysql/mysql.conf.d/mysqld.cnf

Ubah file konfigurasi untuk bind-address:

Jika ada, ubah nilainya sebagai berikut. Jika tidak ada, tambahkan di mana saja di bagian [mysqld].

bind-address = 0.0.0.0

Simpan perubahan Anda ke file konfigurasi dan mulai ulang layanan MySQL.

service mysql restart

Buat / Berikan akses ke pengguna database:

Hubungkan ke database MySQL sebagai pengguna root dan jalankan perintah SQL berikut:

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

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

1

Ini berhasil untuk saya: Hubungkan ke MySQL di 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.