Làm cách nào để kết nối với Máy chủ Mysql bên trong VirtualBox Vagrant?


93

Tôi đã gắn một Máy VirtualBox mới với Vagrant và bên trong máy ảo đó, tôi đã cài đặt Máy chủ Mysql. Làm cách nào tôi có thể kết nối với máy chủ đó bên ngoài vm? Tôi đã chuyển tiếp cổng 3306 của Vagrantfile, nhưng khi tôi cố gắng kết nối với máy chủ mysql, nó sẽ phản hồi với lỗi: 'đọc gói giao tiếp ban đầu'

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

Bạn có thể chia sẻ thêm về cấu hình của mình, cụ thể là các tùy chọn mạng (bao nhiêu, loại [cầu nối, NAT, ...]) cũng như ảnh chụp màn hình của cổng chuyển tiếp mà bạn đã làm không? Nó cũng có thể là một vấn đề liên quan đến tường lửa trên máy ảo của bạn.
Goyuix

Câu trả lời:


125

Đảm bảo MySQL liên kết với 0.0.0.0 chứ không phải 127.0.0.1 nếu không sẽ không thể truy cập được từ bên ngoài máy

Bạn có thể đảm bảo điều này bằng cách chỉnh sửa tệp my.conf của mình và tìm kiếm bind-addressmục - bạn muốn nó trông như thế nào bind-address = 0.0.0.0. Sau đó lưu lại và khởi động lại mysql:

sudo service mysql restart

Nếu bạn đang thực hiện việc này trên máy chủ sản xuất, bạn muốn biết các tác động bảo mật, được thảo luận tại đây: /server/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


Đây chắc chắn là trường hợp cài đặt mysql 5.5 của tôi. Từ các nhận xét trong mysql.conf, tôi nghĩ rằng nó thay đổi theo phiên bản - chúng sử dụng để có cấu hình nhận xét được đề cập trong các câu trả lời khác.
mooreds

7
Bạn có thể tự động bước này trong file bootstrap của bạn với lệnh sau (thử nghiệm trên CentOS):sed -i 's/symbolic-links=0/symbolic-links=0\nbind-address=0.0.0.0/g' /etc/my.cnf
ronan_mac

hay chỉ là nhận xét ra các bind-addressdòng
xiaoyifang

9
Tôi hiểu điều này Host '10.0.2.2' is not allowed to connect to this MySQL server. Nhưng giải quyết với serverfault.com/a/486716/147813
CMCDragonkai

2
Ngoài các liên kết serverfault @CMCDragonkai (Tôi không có danh tiếng đó để bình luận), lệnh này có thể được sử dụng trong một cái gì đó giống như một kịch bản Ansible để tự động cấp quyền người dùng 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

Đăng nhập vào hộp của bạn bằng ssh vagrant@127.0.0.1 -p 2222(mật khẩu mơ hồ)

Sau đó: sudo nano /etc/mysql/my.cnfvà nhận xét các dòng sau bằng #

#skip-external-locking 
#bind-address

lưu nó và thoát

sau đó: sudo service mysql restart

Sau đó, bạn có thể kết nối thông qua SSH với máy chủ MySQL của mình.


10
Tôi đã nhận xét bằng "#" thay vì ";"
Jay,

3
Tôi phải ràng buộc địa chỉ và chạy cái này: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
An Nguyen

Cảm ơn bạn, điều này đã làm phiền tôi trong nhiều năm. # skip-external-lockingđã giải quyết nó!
Jack

18

Tôi đã xem qua vấn đề này gần đây. Tôi đã sử dụng PuPHPet để tạo cấu hình.

Để kết nối với MySQL thông qua SSH, mật khẩu "vagrant" không hoạt động với tôi, thay vào đó tôi phải xác thực thông qua tệp khóa SSH.

Để kết nối với MySQL Workbench

Phương thức kết nối

TCP / IP tiêu chuẩn qua 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)

Kiểm tra kết nối.


Về cơ bản tôi đã làm điều tương tự để kết nối với cơ sở dữ liệu bằng Phpstorm, nhưng thay vì PuPHPet, tôi đã sử dụng Protobox.
null

17

Đối với bất kỳ ai đang cố gắng thực hiện việc này bằng cách sử dụng bàn làm việc mysql hoặc phần tiếp theo pro, đây là các đầu vào:

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)

nguồn: https://coderwall.com/p/yzwqvg


1
Điều này rất hữu ích! Tôi không phải điều chỉnh bind-address ở tất cả các cách sử dụng hộp ảo và chuyển tiếp đại lý ssh
kasakka

1
Đảm bảo bạn xóa mọi khóa công khai khỏi tệp known_hosts của máy chủ lưu trữ dành cho cùng một máy chủ lưu trữ (Địa chỉ IP). Điều này sẽ xảy ra nếu bạn đã sử dụng một Vagrant VM với cùng địa chỉ IP
Jon Hudson

Bạn cũng có thể lấy các giá trị cấu hình SSH từ vagrant ssh-configlệnh.
Tayler

13

Vâng, vì không ai trong số các câu trả lời cho giúp tôi, tôi phải bất lực nhìn hơn, và tìm thấy giải pháp trong này bài viết.

Và câu trả lời ngắn gọn là như sau:

Kết nối với MySQL bằng 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)>

Sử dụng cách tiếp cận nhất định, tôi đã có thể kết nối với cơ sở dữ liệu mysql trong vagrant từ máy chủ Ubuntu bằng MySQL Workbench và cũng sử dụng Valentina Studio.


Tôi đang sử dụng Valentina, về cơ bản là MySQL Workbench về cách kết nối với máy chủ khách Vagrant. Trong tất cả các câu trả lời, câu trả lời này, ngay tại đây, đã làm cho nó hoạt động. Tất cả những thứ khác đã được PuPHPet xử lý cho tôi, vì vậy tất cả những thứ cấu hình Vagrant đó có lẽ dành cho những người thích cấu hình Vagrantfiles của họ theo cách thủ công. Đối với những người PuPHPet đây là câu trả lời.
vô song,

Tôi đã phải chỉ định đường dẫn file SSH Key đến tập tin khóa riêng cho hộp lang thang: $HOME/project/.vagrant/machines/default/virtualbox/private_keytrong Ubuntu 14.04
Francisco Quintero

Bạn cũng có thể lấy các giá trị cấu hình SSH từ vagrant ssh-configlệnh.
Tayler

2

Đây là các bước hiệu quả với tôi sau khi đăng nhập vào hộp:

Định vị tệp cấu hình 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

Trên Ubuntu 16, đường dẫn thường là /etc/mysql/mysql.conf.d/mysqld.cnf

Thay đổi tệp cấu hình cho địa chỉ ràng buộc:

Nếu nó tồn tại, hãy thay đổi giá trị như sau. Nếu nó không tồn tại, hãy thêm nó vào bất kỳ đâu trong phần [mysqld].

bind-address = 0.0.0.0

Lưu các thay đổi của bạn vào tệp cấu hình và khởi động lại dịch vụ MySQL.

service mysql restart

Tạo / Cấp quyền truy cập cho người dùng cơ sở dữ liệu:

Kết nối với cơ sở dữ liệu MySQL với tư cách là người dùng gốc và chạy các lệnh SQL sau:

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

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

1

Điều này đã làm việc cho tôi: Kết nối với MySQL trong 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.