簡體   English   中英

Mysql的Vagrant端口轉發

[英]Vagrant port forwarding for Mysql

我試圖在Vagrantfile中設置端口轉發以從主機系統連接到guest mysqld,但是獲取reading initial communication packet錯誤。 主持人:Yosemite,嘉賓:Trusty,vagrant 1.7.4

Vagrantfile(主持人):

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 3309

my.ini文件(游客):

bind-address            = 127.0.0.1

8080轉發就像一個魅力。

來自guest的mysql -h127.0.0.1 -uroot -p也可以。

mysql -h127.0.0.1 -P 3309 -uroot -p來自主機結果, reading initial communication packet錯誤。

當我從主機telnet時,連接立即關閉:

$ telnet localhost 3309
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

當我從主機ssh到vagrant box時,端口轉發工作:

$ssh vagrant@127.0.0.1 -p 2222 -L3308:localhost:3306 

然后我可以從主機mysql -h127.0.0.1 -P3308 -uroot -p沒有問題,我將其用作臨時解決方法。

終於能夠使它工作 -

編輯/etc/mysql/my.cnf文件並確保

  • 你有bind-address = 0.0.0.0
  • 或者您評論#bind-address ...

您可能需要將其添加到my.cnf文件的mysqld部分:

[mysqld]
bind-address = 0.0.0.0

確保在更改后重新啟動mysql服務器

$ sudo service mysql restart

然后你可以從你的主機連接 - 所以我首先遇到了錯誤

$ mysql -h127.0.0.1 -P 3309 -uroot -p
Enter password:
ERROR 1130 (HY000): Host '172.16.42.2' is not allowed to connect to this MySQL server

所以我回到客人那里做了

vagrant@precise64:~$ mysql -h127.0.0.1 -uroot -p
...
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.42.2' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

然后我沒有從主機連接的問題

$ mysql -h127.0.0.1 -P 3309 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.44-0ubuntu0.12.04.1 (Ubuntu)

第一個答案是對的,但還不夠。當我連接MySQL時,我收到一個錯誤:

主機'10 .0.2.2'不允許連接到此MySQL服務器

解:

創建由'password'標識的用戶'root'@'10.0.2.2';

授予所有權限 與授權選項'root'@'10.0.2.2';

沖洗特權;

啊哈,所有問題都解決了,

我個人不打算修改MySQL用於開發Vagrant盒子 - 在配置器中編寫腳本非常耗時且很難,這意味着每次你vagrany destroy或新開發者開始貢獻時你vagrany destroy手工完成。 相反,我通過SSH隧道連接,這使用Vagrant生成的private_key文件變得非常容易。 無需額外的安裝后調整。

按照以下步驟使用SequelPro,MySql Workbench或支持SSH連接的任何其他客戶端訪問SSH隧道:

  • 選擇SSH連接選項
  • SSH模式下的“主機”變為localhost或特別是127.0.0.1 (更可預測的跨操作系統)
  • 用戶名/密碼是數據庫用戶名/密碼。 對於開發,您可以使用root並在配置程序中定義/創建密碼(請參閱下面的代碼段)
  • SSH用戶名是Vagrant
  • 沒有SSH密碼 - 只需使用private_key代替Vagrant機器,位於VM項目根目錄中的.vagrant/machines/default/virtualbox中; 請注意,在大多數操作系統的這個目錄中,所有操作都以a開頭. 是隱藏的

要自動創建安裝和root密碼,請將其添加到Vagrant配置程序腳本文件(Vagrantfile中的config.vm.provision ),通常名為provisioner.sh

debconf-set-selections <<< 'mysql-server mysql-server/root_password password SuperSecretPasswordHere'
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password SuperSecretPasswordHere'

apt-get install -y mysql-server

希望這有助於拯救別人一些時間!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM