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.