VirtualBox Vagrant 내에서 Mysql Server에 연결하는 방법은 무엇입니까?


93

Vagrant를 사용하여 새 VirtualBox Machine을 마운트하고 해당 VM 내에 Mysql Server를 설치했습니다. VM 외부의 해당 서버에 어떻게 연결할 수 있습니까? Vagrantfile의 포트 3306을 이미 전달했지만 mysql 서버에 연결하려고하면 'reading initial communication packet'오류와 함께 다시 게시됩니다.

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

더 많은 구성, 특히 네트워킹 옵션 (몇 개, 유형 [브리지, NAT, ...])과 수행 한 포트 전달의 스크린 샷을 공유 할 수 있습니까? VM의 방화벽 관련 문제 일 수도 있습니다.
Goyuix

답변:


125

MySQL이 127.0.0.1이 아닌 0.0.0.0에 바인딩되는지 확인하십시오. 그렇지 않으면 시스템 외부에서 액세스 할 수 없습니다.

my.conf 파일을 편집하고 bind-address항목을 검색하여이를 확인할 수 있습니다 bind-address = 0.0.0.0. 그런 다음 이것을 저장하고 mysql을 다시 시작하십시오.

sudo service mysql restart

프로덕션 서버에서이 작업을 수행하는 경우 /server/257513/how-bad-is-setting-mysqls-bind-address-to 에서 논의 된 보안 의미를 알고 싶습니다. -0-0-0-0


이것은 mysql 5.5 설치의 경우였습니다. mysql.conf의 주석에서 버전에 따라 다를 것이라고 생각합니다. 다른 답변에서 언급 한 구성을 주석 처리하는 데 사용합니다.
mooreds aug

7
다음 명령을 사용하여 부트 스트랩 파일에서이 단계를 자동화 할 수 있습니다 (CentOS에서 테스트 됨).sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac

아니면 그냥 주석 bind-address라인
xiaoyifang

9
나는 이것을 얻는다 Host '10.0.2.2' is not allowed to connect to this MySQL server. 그러나 해결할 serverfault.com/a/486716/147813
CMCDragonkai

2
@CMCDragonkai의 저기 serverfault 링크뿐만 아니라,이 명령이 루트 사용자 권한을 부여 자동화하는 Ansible 스크립트 같은 것을 사용할 수 있습니다 (I 코멘트에이 명성을하지 않음) :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)

그런 sudo nano /etc/mysql/my.cnf다음 #으로 다음 줄을 주석 처리하십시오.

#skip-external-locking 
#bind-address

저장 후 종료

그때: sudo service mysql restart

그런 다음 SSH를 통해 MySQL 서버에 연결할 수 있습니다.


10
";"대신 "#"로 주석 처리했습니다.
Jay

3
나는 주소를 결합해야하고이 실행 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
안 응 우옌

감사합니다. 이것은 오랫동안 나를 괴롭 혔습니다. # skip-external-locking해결했습니다!
Jack

18

최근에이 문제를 발견했습니다. PuPHPet을 사용하여 구성을 생성했습니다.

SSH를 통해 MySQL에 연결하려면 "vagrant"암호가 작동하지 않고 대신 SSH 키 파일을 통해 인증해야했습니다.

MySQL Workbench에 연결하려면

연결 방법

SSH를 통한 표준 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)

연결을 테스트하십시오.


Phpstorm으로 데이터베이스에 연결하기 위해 기본적으로 동일한 작업을 수행했지만 PuPHPet 대신 Protobox를 사용했습니다.
null

17

mysql workbench 또는 sequel pro를 사용하여이 작업을 수행하려는 사람에게는 다음과 같은 입력이 있습니다.

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)

출처 : https://coderwall.com/p/yzwqvg


1
이것은 매우 도움이되었습니다! 나는 가상 상자와 SSH 에이전트 포워딩을 사용하는 모든에 바인드 주소를 조정하지 않았다
kasakka

1
동일한 호스트 (IP 주소)에 대한 호스트 시스템의 known_hosts 파일에서 모든 공개 키를 제거했는지 확인하십시오. 같은 IP 주소와 다른 방랑 VM을 사용하고있는 경우에 일어날 것입니다
존 허드슨을

vagrant ssh-config명령 에서 SSH 구성 값을 가져올 수도 있습니다 .
Tayler

13

글쎄, 주어진 답변 중 어느 것도 도움이되지 않았기 때문에 더 많이보아야했고 이것 에서 해결책을 찾았습니다. 기사를.

간단히 말해서 대답은 다음과 같습니다.

MySQL Workbench를 사용하여 MySQL에 연결

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

주어진 접근 방식을 사용하여 MySQL Workbench를 사용하고 Valentina Studio를 사용하여 호스트 Ubuntu 컴퓨터에서 vagrant의 mysql 데이터베이스에 연결할 수있었습니다.


저는 Vagrant 게스트 서버에 연결하는 방법 측면에서 기본적으로 MySQL Workbench 인 Valentina를 사용하고 있습니다. 모든 답변 중에서 바로 여기에있는이 답변이 제대로 작동했습니다. 다른 모든 항목은 PuPHPet에서 처리하므로 Vagrant 구성 항목은 모두 Vagrantfile을 수동으로 구성하려는 사람들을위한 것입니다. PuPHPet 사람들에게는 이것이 답입니다.
unrivaledcreations

방랑 함의 개인 키 파일에 대한 SSH 키 파일 경로를 지정해야했습니다. $HOME/project/.vagrant/machines/default/virtualbox/private_keyUbuntu 14.04
Francisco Quintero

vagrant ssh-config명령 에서 SSH 구성 값을 가져올 수도 있습니다 .
Tayler

2

상자에 로그인 한 후 나를 위해 일한 단계는 다음과 같습니다.

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

Ubuntu 16에서 경로는 일반적으로 /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address에 대한 구성 파일 변경 :

존재하는 경우 다음과 같이 값을 변경하십시오. 존재하지 않는 경우 [mysqld] 섹션의 아무 곳에 나 추가하십시오.

bind-address = 0.0.0.0

구성 파일에 대한 변경 사항을 저장하고 MySQL 서비스를 다시 시작합니다.

service mysql restart

데이터베이스 사용자에게 액세스를 생성 / 부여합니다.

루트 사용자로 MySQL 데이터베이스에 연결하고 다음 SQL 명령을 실행합니다.

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

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

1

이것은 나를 위해 일했습니다 : Vagrant에서 MySQL에 연결

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.