ホストシステムからゲストmysqldに接続するようにVagrantfileでポート転送を設定しようとしていますが、reading initial communication packet
エラーが発生します。ホスト:ヨセミテ、ゲスト:信頼できる、放浪者1.7.4
Vagrantfile(ホスト):
config.vm.network "forwarded_port", guest: 80, Host: 8080
config.vm.network "forwarded_port", guest: 3306, Host: 3309
my.ini(guest):
bind-address = 127.0.0.1
8080転送は魅力のように機能します。
ゲストからのmysql -h127.0.0.1 -uroot -p
も機能します。
ホストからのmysql -h127.0.0.1 -P 3309 -uroot -p
は、reading initial communication packet
エラーで結果を出します。
Hostからtelnetすると、接続がすぐに閉じます。
$ telnet localhost 3309
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign Host.
Hostからvagrant boxにsshするとポート転送が機能します。
$ssh [email protected] -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を開発Vagrantボックス用に変更することに煩わされていません-vagrany destroy
または新しい開発者がコントリビューションを開始するたびに手作業で行う必要があることを意味するプロビジョナーでスクリプトを作成することは時間がかかり困難です。代わりに、Vagrantが生成したprivate_key
ファイルを使用して非常に簡単にできるSSHトンネル経由で接続します。インストール後の追加の調整は必要ありません。
SequelPro、MySql Workbench、またはSSH接続をサポートするその他のクライアントを使用してSSHトンネルを作成するには、次の手順に従います。
127.0.0.1
(より予測可能なクロスOS)になりますroot
を使用するだけで、パスワードはプロビジョナーで定義/作成されます(以下のスニペットを参照)。Vagrant
ですprivate_key
を使用します。これは、VMプロジェクトのルートの.vagrant/machines/default/virtualbox
にあります。ほとんどのOSではこのディレクトリ、および.
で始まるすべてが非表示になっていますインストールとルートパスワードの作成を自動化するには、これを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
これが他の誰かの時間を節約するのに役立つことを願っています!
最初の答えは正しいですが、十分ではありません。MySQLに接続すると、エラーが発生します。
ホスト「10.0.2.2」はこのMySQLサーバーへの接続を許可されていません
解決:
'password'で識別されるユーザー 'root' @ '10 .0.2.2 'を作成します。
。のすべての特権を 'root' @ '10 .0.2.2 'にgrantオプションで付与します。
フラッシュ特権;
ああ、すべての問題は解決されました、