Як підключитися до сервера Mysql у VirtualBox Vagrant?


93

Я встановив нову машину VirtualBox з Vagrant, а всередині цього VM я встановив Mysql Server. Як я можу підключитися до цього сервера за межами vm? Я вже пересилаю порт 3306 файлу Vagrant, але коли я намагаюся підключитися до сервера mysql, він відповідає помилкою: "читання початкового пакету зв'язку"

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

Чи можете ви поділитися більшою частиною своєї конфігурації, зокрема мережевих параметрів (скільки, введіть [bridged, NAT, ...]), а також скріншотом порту, який ви робили вперед? Це також може бути проблемою, пов’язаною з брандмауером на вашій віртуальній машині.
Goyuix

Відповіді:


125

Переконайтесь, що MySQL прив’язується до 0,0.0.0, а не до 127.0.0.1, або він не буде доступний ззовні машини

Ви можете переконатися в цьому, відредагувавши файл 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, я думаю, що це залежить від версії - вони використовують коментовану конфігурацію, згадану в інших відповідях.
пришвартовані

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. Але вирішено за допомогою сервера defaultfault.com/a/486716/147813
CMCDragonkai

2
На додаток до посилання за промовчанням на сервер @CMCDragonkai (у мене немає репутації, щоб коментувати), цю команду можна використовувати в чомусь на зразок скрипта Ansible для автоматизації надання прав адміністратора 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

Увійдіть у свій ящик за допомогою ssh vagrant@127.0.0.1 -p 2222(бродячий пароль)

Потім: sudo nano /etc/mysql/my.cnfі прокоментуйте наступні рядки за допомогою #

#skip-external-locking 
#bind-address

зберегти його і вийти

тоді: sudo service mysql restart

Потім ви зможете підключитися через SSH до свого MySQL-сервера.


10
Я прокоментував "#" замість ";"
Джей

3
Я мушу прив’язати адресу та запустити це: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
Nguyen

Дякую, це мене турбувало віками. # skip-external-lockingвирішив!
Джек

18

Нещодавно я зіткнувся з цим питанням. Я використовував PuPHPet для створення конфігурації.

Для підключення до MySQL через SSH для мене не працював «бродячий» пароль, натомість мені довелося пройти автентифікацію через файл ключа SSH.

Для підключення до MySQL Workbench

Спосіб підключення

Стандартний TCP / IP через 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)

Перевірте з'єднання.


В основному я зробив те саме, щоб підключитися до бази даних за допомогою Phpstorm, але замість PuPHPet я використав Protobox.
null

17

Для тих, хто намагається це зробити, використовуючи mysql workbench або продовження 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
Переконайтеся, що ви видалили будь-які відкриті ключі з файлу known_hosts вашого хост-машини, які призначені для того самого хосту (IP-адреса). Це сталося, якщо ви використовували іншу віртуальну машину Vagrant з тією ж IP-адресою
Джон Хадсон,

Ви також можете отримати значення конфігурації SSH за допомогою vagrant ssh-configкоманди.
Тейлер

13

Ну, оскільки жодна з поданих відповідей мені не допомогла, мені довелося шукати більше і знайти рішення в цій статті.

І відповідь у двох словах така:

Підключення до MySQL за допомогою 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)>

Використовуючи даний підхід, я зміг підключитися до бази даних mysql у бродязі з хост-машини Ubuntu за допомогою MySQL Workbench, а також за допомогою Valentina Studio.


Я використовую Valentina, яка в основному є MySQL Workbench з точки зору того, як можна підключитися до гостьового сервера Vagrant. З усіх відповідей ця, саме тут, змусила це спрацювати. Всі ці інші речі для мене обробляли PuPHPet, тому все те, що конфігурація Vagrant, мабуть, більше для тих людей, які люблять вручну налаштовувати свої Vagrantfiles. Для людей PuPHPet це відповідь.
неперевершені

Мені довелося вказати шлях до файлу ключа SSH до файлу приватного ключа для скриньки бродяг: $HOME/project/.vagrant/machines/default/virtualbox/private_keyв Ubuntu 14.04
Francisco Quintero

Ви також можете отримати значення конфігурації SSH за допомогою vagrant ssh-configкоманди.
Тейлер

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

Змінити файл конфігурації для адреси прив'язки:

Якщо воно існує, змініть значення наступним чином. Якщо він не існує, додайте його де-небудь у розділі [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

Це працювало для мене: Підключення до MySQL у 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.