13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VagrantにMySQLをインストールし、ローカルから接続する

Last updated at Posted at 2020-01-03

この記事について

テスト用のDBが欲しかったのですが、ローカル環境にDBを作成したくなかったので、Vagrantを立てて、そこにMySQLを落としてみました。そのやり方を記述します。また、ローカル側のMySQLWorkbenchからVagrant上のMySQLに接続する際にエラーが出たのですが、グーグルで調べても解決策の情報があまり載っていなかったため、苦労しました。そこも触れていきます。

環境

ローカル
Mac
Vagrant 2.2.6
Virtualbox 5.2

仮想環境 (192.168.33.10)
CentOS 7.2

手順

以下の流れで行なっていきます。

  1. Vagrantfileを作成する(vagrant init)
  2. Vagrantfileとprovision.shを編集する
  3. Vagrant upする
  4. MySQLに接続してみる
  5. MySQLへの接続許可するように設定する

TRY!

1. Vagrantfileを作成する(vagrant init)

まず、Mac上で仮想サーバーを立てるフォルダを作成し、vagrant initのコマンドを実行します。
image.png

これで、Vagrantのテンプレファイルが作成されました。
image.png

2. Vagrantfileとprovision.shを編集する

次に、Vagrantfileを編集します。ちなみにVagrantileとは、仮想サーバーを立てる際に、どうやってサーバーを立てるかの指示が書かれているもので、例えば、どんなOSを仮想サーバーに入れるのか、フォルダの書込許可はどのユーザーに当てるのか、などが設定できます。

今回は、Vagrantfileで3つの指示を指定します。

  1. CentOSをOSに指定
  2. MySQLをインストール
  3. ローカル(ホスト)からアクセスできる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を実行します。
image.png

作成された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を実行します。
image.png
こんな感じで、仮想サーバーが作られていきます。

4. MySQLに接続してみる

このままMySQLに接続するとどうなるのかを検証します。
まず、仮想サーバー(ゲスト)にSSHでアクセスし、MySQLに接続できるか確認します。仮想サーバー(ゲスト)にSSHでアクセスするため、以下のコマンドを叩きます。

$vagrant ssh

image.png
これで、Vagrant内に入れました。

次に、MySQLに接続します。provision.shで作成されたMySQLでは、デフォルトではパスワードのないrootユーザーが作成されているので、以下のコマンドで接続できます。

$mysql -u root -p

すると、パスワードを聞かれますが、Enterを押します。
image.png

これで、MySQLへの接続が確認できました。

今度は、ローカル(ホスト)からMySQLに接続ができるか確認するため、MySQLWorkbenchを開き、以下の情報を入力します。

Hostname: 192.168.33.10
Port: 3306
Username: root
Password: (blank)

image.png

すると、以下のようなメッセージが出てきます。
image.png
Can't connect to MySQL server on '192.168.33.10' (60)

同じことがMacのターミナルからtelnetで確認できます。

$telnet 192.168.33.10 3306

実際のスクショ:
image.png

どうやら、192.168.33.10自体に繋がってなさそうです。
pingで接続確認します。
image.png
pingすら通っていませんね。。

Vagrantfileのあるフォルダ配下で、vagrant reloadを実行し、再度pingしてみます。
image.png
image.png

pingが通りました。自分の場合、config.vm.network "private_network"のコメントアウトをしたのが実はvagrant upの後だったのでこのエラーが出ていたようです。記事を書きながら動かしていたのでうっかりしていました。

再度、ローカルからMySQLに接続できるか確認します。今回はTelnetのみ実行します。MySQLWorkbenchでも同じ結果が出ます。
image.png

これは、仮想サーバ(ゲスト)側のMySQLが、ローカル(ホスト)からのアクセスを拒んでいる時に出てくるメッセージです。次のステップでこれを解消します。

5. MySQLへの接続許可するように設定する

再度、仮想サーバー(ゲスト)にSSHでアクセスし、MySQLにrootユーザーでアクセスします。次に、以下のクエリを実行すると仮想サーバー(ゲスト)のMySQLはどこからでもrootユーザーのアクセスを許可するようになります。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

実際のスクショ:
image.png

実行後Ctrl+Cmysql>を閉じ、systemctl restart mysqldでデーモンを再起動します。この時、VagrantのRootユーザのパスワードが聞かれます。パスワードはディフォルトでvagrantです。

ローカル(ホスト)側に戻り、MySQLWorkbenchで接続確認します。

image.png

無事接続できました。

最後に

以上、VagrantにMySQLをインストールし、ローカルから接続する方法でした。自分はあまり環境構築に慣れていないため、苦労しました。。どうか参考になったと感じたら「いいね」してもらえると幸いです。

参考

Connect to a MySQL Server inside of a Vagrant Machine from the Host Machine
vagrant上のmariadbにローカルのマネージメントツールからアクセスするためにやったこと

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?