web-dev-qa-db-ja.com

MysqlのVagrantポート転送

ホストシステムからゲスト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から問題なく接続できます。これは一時的な回避策として使用します。

13
Alex Blex

ようやくそれを機能させることができました-

/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)
22

個人的に私はMySQLを開発Vagrantボックス用に変更することに煩わされていません-vagrany destroyまたは新しい開発者がコントリビューションを開始するたびに手作業で行う必要があることを意味するプロビジョナーでスクリプトを作成することは時間がかかり困難です。代わりに、Vagrantが生成したprivate_keyファイルを使用して非常に簡単にできるSSHトンネル経由で接続します。インストール後の追加の調整は必要ありません。

SequelPro、MySql Workbench、またはSSH接続をサポートするその他のクライアントを使用してSSHトンネルを作成するには、次の手順に従います。

  • SSH接続オプションを選択
  • SSHモードの「ホスト」はローカルホストまたは具体的には127.0.0.1(より予測可能なクロスOS)になります
  • ユーザー名/パスワードはデータベースのユーザー名/パスワードです。開発の場合は、rootを使用するだけで、パスワードはプロビジョナーで定義/作成されます(以下のスニペットを参照)。
  • SSHユーザー名はVagrantです
  • SSHパスワードなし-代わりに、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

これが他の誰かの時間を節約するのに役立つことを願っています!

2
Scott Byers

最初の答えは正しいですが、十分ではありません。MySQLに接続すると、エラーが発生します。

ホスト「10.0.2.2」はこのMySQLサーバーへの接続を許可されていません

解決:

'password'で識別されるユーザー 'root' @ '10 .0.2.2 'を作成します。

のすべての特権を 'root' @ '10 .0.2.2 'にgrantオプションで付与します。

フラッシュ特権;

ああ、すべての問題は解決されました、

2
LiamHsia