この記事について
テスト用のDBが欲しかったのですが、ローカル環境にDBを作成したくなかったので、Vagrantを立てて、そこにMySQLを落としてみました。そのやり方を記述します。また、ローカル側のMySQLWorkbenchからVagrant上のMySQLに接続する際にエラーが出たのですが、グーグルで調べても解決策の情報があまり載っていなかったため、苦労しました。そこも触れていきます。
環境
ローカル
Mac
Vagrant 2.2.6
Virtualbox 5.2
仮想環境 (192.168.33.10)
CentOS 7.2
手順
以下の流れで行なっていきます。
- Vagrantfileを作成する(vagrant init)
- Vagrantfileとprovision.shを編集する
- Vagrant upする
- MySQLに接続してみる
- MySQLへの接続許可するように設定する
TRY!
1. Vagrantfileを作成する(vagrant init)
まず、Mac上で仮想サーバーを立てるフォルダを作成し、vagrant init
のコマンドを実行します。
2. Vagrantfileとprovision.shを編集する
次に、Vagrantfileを編集します。ちなみにVagrantileとは、仮想サーバーを立てる際に、どうやってサーバーを立てるかの指示が書かれているもの
で、例えば、どんなOSを仮想サーバーに入れるのか、フォルダの書込許可はどのユーザーに当てるのか、などが設定できます。
今回は、Vagrantfileで3つの指示を指定します。
- CentOSをOSに指定
- MySQLをインストール
- ローカル(ホスト)からアクセスできるIPアドレスを解放
2については、サーバーを立てた後でCentOSのコマンドを叩いても可能ですが、サーバーを立てる際にインストールした方が手間が省けます。
1. CentOSをOSに指定
Vagrantfileをテキストエディタで開き、以下の箇所を変更します。
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "base"
After:
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "bento/centos-7.2"
見ての通り、config.vm.box
ではOSを指定することができるのがわかるかと思います。
2. MySQLをインストール
次に、MySQLをインストールするため、先ほどのコードの下に、以下を追記します。
#Run provision.sh
config.vm.provision :shell, :path => "provision.sh"
config.vm.provision :shell
は.sh
ファイルを実行するという指示を意味します。:path =>
の後に.sh
ファイルのパスを書きます。今回はprovision.sh
というファイルを指定します。
次に、provision.sh
を作成しましょう。ターミナルでvi provision.sh
を実行します。
作成されたprovision.sh
で以下のようにMySQLをインストールし、デーモンを起動するようにします。
# Install MySQL
sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum -y install mysql-community-server
# Start MySQL when vagrant is up
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
3. ローカル(ホスト)からアクセスできるIPアドレスを解放
最後に、ローカル(ホスト)から仮想サーバー(ゲスト)アクセスできるIPアドレスを解放するため、Vagrantfileのconfig.vm.network "private_network"
の箇所をコメントアウトします。
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
これにより、Vagrantを起動するだけで、192.168.33.10
にMySQLの入ったCentOSが作成されます。
3. Vagrant upする
次に、Vagrantを起動するため、vagrant up
を実行します。
こんな感じで、仮想サーバーが作られていきます。
4. MySQLに接続してみる
このままMySQLに接続するとどうなるのかを検証します。
まず、仮想サーバー(ゲスト)にSSHでアクセスし、MySQLに接続できるか確認します。仮想サーバー(ゲスト)にSSHでアクセスするため、以下のコマンドを叩きます。
$vagrant ssh
次に、MySQLに接続します。provision.sh
で作成されたMySQLでは、デフォルトではパスワードのないrootユーザーが作成されているので、以下のコマンドで接続できます。
$mysql -u root -p
これで、MySQLへの接続が確認できました。
今度は、ローカル(ホスト)からMySQLに接続ができるか確認するため、MySQLWorkbenchを開き、以下の情報を入力します。
Hostname: 192.168.33.10
Port: 3306
Username: root
Password: (blank)
すると、以下のようなメッセージが出てきます。
Can't connect to MySQL server on '192.168.33.10' (60)
同じことがMacのターミナルからtelnetで確認できます。
$telnet 192.168.33.10 3306
どうやら、192.168.33.10
自体に繋がってなさそうです。
ping
で接続確認します。
ping
すら通っていませんね。。
Vagrantfile
のあるフォルダ配下で、vagrant reload
を実行し、再度ping
してみます。
ping
が通りました。自分の場合、config.vm.network "private_network"
のコメントアウトをしたのが実はvagrant up
の後だったのでこのエラーが出ていたようです。記事を書きながら動かしていたのでうっかりしていました。
再度、ローカルからMySQLに接続できるか確認します。今回はTelnetのみ実行します。MySQLWorkbenchでも同じ結果が出ます。
これは、仮想サーバ(ゲスト)側のMySQLが、ローカル(ホスト)からのアクセスを拒んでいる時に出てくるメッセージです。次のステップでこれを解消します。
5. MySQLへの接続許可するように設定する
再度、仮想サーバー(ゲスト)にSSHでアクセスし、MySQLにroot
ユーザーでアクセスします。次に、以下のクエリを実行すると仮想サーバー(ゲスト)のMySQLはどこからでもroot
ユーザーのアクセスを許可するようになります。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
実行後Ctrl+C
でmysql>
を閉じ、systemctl restart mysqld
でデーモンを再起動します。この時、VagrantのRootユーザのパスワードが聞かれます。パスワードはディフォルトでvagrant
です。
ローカル(ホスト)側に戻り、MySQLWorkbenchで接続確認します。
無事接続できました。
最後に
以上、VagrantにMySQLをインストールし、ローカルから接続する方法でした。自分はあまり環境構築に慣れていないため、苦労しました。。どうか参考になったと感じたら「いいね」してもらえると幸いです。
参考
Connect to a MySQL Server inside of a Vagrant Machine from the Host Machine
vagrant上のmariadbにローカルのマネージメントツールからアクセスするためにやったこと