VirtualBox Vagrant内のMysqlサーバーに接続する方法


93

Vagrantを使用して新しいVirtualBoxマシンをマウントし、そのVM内にMysqlサーバーをインストールしました。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

本番サーバーでこれを実行している場合、ここで説明されているセキュリティの影響に注意する必要があります。https//serverfault.com/questions/257513/how-bad-is-setting-mysqls-bind-address-to -0-0-0-0


これは間違いなく私のmysql 5.5インストールの場合でした。mysql.confのコメントから、バージョンによって異なると思います。コメントアウトされた構成を他の回答で言及するために使用します。
2013

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のリンクに加えて、(私はコメントにそこの評判を持っていない)、このコマンドは、rootユーザー権限を付与自動化するAnsibleスクリプトのようなものに使用することができます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
「;」ではなく「#」でコメントアウトしました。
Jay

3
私はアドレスをバインドし、これを実行する必要があります: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
アングエン

ありがとう、これは長い間私を悩ませていました。# skip-external-locking解決しました!
ジャック

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ワークベンチまたは続編プロを使用してこれを行おうとする人にとって、これらは入力です。

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エージェント転送を使用してbind-addressを調整する必要はまったくありませんでした
kasakka 2013

1
同じホスト(IPアドレス)のホストマシンのknown_hostsファイルから公開鍵を必ず削除してください。これは、同じIPアドレスを持つ別のVagrant VMを使用している場合に発生します
Jon Hudson

vagrant ssh-configコマンドからSSH構成値を取得することもできます。
テイラー2017年

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データベースに接続することができました。


私はValentinaを使用しています。これは、Vagrantゲストサーバーへの接続方法に関しては基本的にMySQL Workbenchです。すべての答えのうち、これがここにあるので、うまくいきました。他のすべてのものはPuPHPetによって私のために処理されたので、すべてのVagrant構成のものはおそらく手動でVagrantfilesを構成したい人のためのものです。PuPHPetの人々にとってはこれが答えです。
他の追随を許さない

私はvagrantボックスの秘密鍵ファイルへのSSHキーファイルパスを指定する必要がありました:$HOME/project/.vagrant/machines/default/virtualbox/private_keyUbuntu 14.04の場合
Francisco Quintero

vagrant ssh-configコマンドからSSH構成値を取得することもできます。
テイラー2017年

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データベースにrootユーザーとして接続し、次の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.