VirtualBox Vagrant içinde Mysql Sunucusuna nasıl bağlanılır?


93

Vagrant ile yeni bir VirtualBox Makinesi kurdum ve bu sanal makinenin içine Mysql Sunucusunu kurdum. VM dışında bu sunucuya nasıl bağlanabilirim? Vagrantfile'ın 3306 numaralı bağlantı noktasını zaten iletiyorum, ancak mysql sunucusuna bağlanmaya çalıştığımda, 'ilk iletişim paketini okuma' hatasıyla yanıt veriyor

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

Yapılandırmanızın daha fazlasını, özellikle ağ oluşturma seçeneklerini (kaç tane, [köprülü, NAT, ...] yazın) ve yaptığınız bağlantı noktası yönlendirmelerinin ekran görüntüsünü paylaşabilir misiniz? Ayrıca, VM'nizde güvenlik duvarıyla ilgili bir sorun olabilir.
Goyuix

Yanıtlar:


126

MySQL'in 127.0.0.1'e değil 0.0.0.0'a bağlandığından emin olun, aksi takdirde makinenin dışından erişilemez.

Bunu, my.conf dosyanızı düzenleyerek ve bind-addressöğeyi arayarak sağlayabilirsiniz - istediğiniz gibi görünmesini istiyorsunuz bind-address = 0.0.0.0. Sonra bunu kaydedin ve mysql'i yeniden başlatın:

sudo service mysql restart

Bunu bir üretim sunucusunda yapıyorsanız, burada tartışılan güvenlik etkilerinin farkında olmak istersiniz: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


Bu kesinlikle mysql 5.5 kurulumum için geçerliydi. Mysql.conf'daki yorumlardan, sürüme göre değiştiğini düşünüyorum - diğer yanıtlarda belirtilen yapılandırmanın yorumlanmış olması için kullanıyorlar.
2013

7
Önyükleme dosyanızdaki bu adımı aşağıdaki komutla otomatikleştirebilirsiniz (CentOS üzerinde test edilmiştir):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac

ya da sadece bind-addresssatırı
yorumlayın

9
Bunu anlıyorum Host '10.0.2.2' is not allowed to connect to this MySQL server. Ancak serverfault.com/a/486716/147813
CMCDragonkai

2
@CMCDragonkai serverfault bağlantısına ek olarak (orada yorum yapacak saygınlığım yok), bu komut Ansible komut dosyası gibi kök kullanıcı izinlerinin verilmesini otomatikleştirmek için kullanılabilir: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(Password vagrant) ile kutunuza giriş yapın

Ardından: sudo nano /etc/mysql/my.cnfve aşağıdaki satırları # ile yorumlayın

#skip-external-locking 
#bind-address

kaydet ve çık

sonra: sudo service mysql restart

Ardından SSH aracılığıyla MySQL sunucunuza bağlanabilirsiniz.


10
";" Yerine "#" ile yorum yaptım
Jay

3
Adresi bağlamalı ve şunu çalıştırmalıyım: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen

Teşekkür ederim, bu beni asırlardır rahatsız ediyordu. # skip-external-lockingçözüldü!
Jack

18

Geçenlerde bu sorunla karşılaştım. Bir yapılandırma oluşturmak için PuPHPet kullandım.

MySQL'e SSH aracılığıyla bağlanmak için, "serseri" parola benim için çalışmıyordu, bunun yerine SSH anahtar dosyası aracılığıyla kimlik doğrulaması yapmam gerekiyordu.

MySQL Workbench ile bağlantı kurmak için

Bağlantı yöntemi

SSH üzerinden standart TCP / IP

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)

Bağlantıyı test edin.


Phpstorm ile veritabanına bağlanmak için temelde aynı şeyi yaptım, ancak PuPHPet yerine Protobox kullandım.
null

17

Bunu mysql workbench veya sequel pro kullanarak yapmaya çalışan herkes için bunlar girdilerdir:

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)

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


1
Bu çok yardımcı oldu! Sanal kutu ve ssh aracı iletimini kullanarak bağlantı adresini hiç ayarlamam
gerekmedi

1
Ana makinenizin bilinen_hosts dosyasından aynı ana bilgisayar (IP Adresi) için olan tüm genel anahtarları kaldırdığınızdan emin olun. Aynı IP adresine sahip başka bir Vagrant VM kullanıyorsanız bu gerçekleşmiş olacaktır
Jon Hudson

SSH yapılandırma değerlerini vagrant ssh-configkomuttan da alabilirsiniz .
Tayler

13

Verilen yanıtların hiçbiri bana yardımcı olmadığından, bu makalede daha fazla bakmam ve çözüm bulmam gerekti.

Ve kısaca cevap şudur:

MySQL Workbench kullanarak MySQL'e bağlanma

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)>

Verilen yaklaşımı kullanarak, MySQL Workbench ve Valentina Studio kullanarak ana Ubuntu makinesinden serseri mysql veritabanına bağlanabildim.


Vagrant konuk sunucusuna nasıl bağlanılacağı açısından temelde MySQL Workbench olan Valentina'yı kullanıyorum. Tüm cevaplar arasında, buradaki bu, işe yaradı. Diğer tüm şeyler benim için PuPHPet tarafından ele alındı, bu yüzden tüm bu Vagrant yapılandırma işleri muhtemelen Vagrantfiles'larını manuel olarak yapılandırmak isteyenler için daha fazla. PuPHPet çalışanları için cevap budur.
unrivaledcreations

Serseri kutusu için özel anahtar dosyasının SSH Anahtar Dosyası yolunu belirtmem gerekiyordu: $HOME/project/.vagrant/machines/default/virtualbox/private_keyUbuntu 14.04
Francisco Quintero

SSH yapılandırma değerlerini vagrant ssh-configkomuttan da alabilirsiniz .
Tayler

2

Kutuya giriş yaptıktan sonra benim için çalışan adımlar şunlardır:

MySQL yapılandırma dosyasını bulun:

$ 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'da yol genellikle /etc/mysql/mysql.conf.d/mysqld.cnf

Bağlantı adresi için yapılandırma dosyasını değiştirin:

Varsa, değeri aşağıdaki şekilde değiştirin. Mevcut değilse, [mysqld] bölümünde herhangi bir yere ekleyin.

bind-address = 0.0.0.0

Değişikliklerinizi yapılandırma dosyasına kaydedin ve MySQL hizmetini yeniden başlatın.

service mysql restart

Veritabanı kullanıcısı oluştur / ver:

MySQL veritabanına kök kullanıcı olarak bağlanın ve aşağıdaki SQL komutlarını çalıştırın:

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

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

1

Bu benim için çalıştı: Vagrant'ta MySQL'e bağlanın

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.