[Vagrant]AmazonLinux + MySQL5.7 + sakila DBが使える環境をコマンド1つで構築する

カテゴリ: aws, MySQL, Vagrant

新しいプログラム言語やフレームワークを学ぶ時、適当なサンプルデータが入ったMySQLデータベースが欲しくなる場合があります。

今回は、このような時のためにvagrantを利用して下記の構成のvmをコマンド1つで構築できるようなvagrantの設定ファイル(Vagrantfile)を用意しました。
 
- AmazonLinux
- MySQL 5.7
- MySQLのsakilaサンプルデータベース

vagrantがインストールされたPCで'vagrant up'するだけで、sakilaサンプルデータベースが入ったMySQLサーバを構築するための設定ファイルです。

設定ファイル

下記のファイルを'Vagrantfile'のファイル名で保存します。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "mvbcoding/awslinux"
  config.vm.network "private_network", ip: "192.168.33.20"

  # config.vm.box_check_update = false
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  # config.vm.network "public_network"
  # config.vm.synced_folder "../data", "/vagrant_data"

  config.vm.provision "shell", inline: <<-SHELL
    # install and activate mysql server.
    yum install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm -y
    yum install mysql-community-server -y
    service mysqld start
    chkconfig mysqld on

    # change mysql password policy
    sudo sh -c 'echo validate-password=OFF >> /etc/my.cnf'
    service mysqld restart

    # change root's initial password.
    DB_PASSWORD_ORG=$(grep "A temporary password is generated" /var/log/mysqld.log | sed -s 's/.*root@localhost: //')
    DB_PASSWORD='root'
    mysql -uroot -p${DB_PASSWORD_ORG} --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_PASSWORD}'; flush privileges;"

    # download sakila database definition.
    wget -q http://downloads.mysql.com/docs/sakila-db.tar.gz
    tar -zxvf sakila-db.tar.gz

    # create sakila database.
    mysql -u root -p${DB_PASSWORD} -e "source sakila-db/sakila-schema.sql"
    mysql -u root -p${DB_PASSWORD} -e "source sakila-db/sakila-data.sql"

    # create sakila user.
    mysql -u root -p${DB_PASSWORD} -e "CREATE USER sakila@'%' IDENTIFIED BY 'sakila';"
    mysql -u root -p${DB_PASSWORD} -e "GRANT ALL PRIVILEGES ON *.* TO sakila@'%';"
    mysql -u root -p${DB_PASSWORD} -e "FLUSH PRIVILEGES;" -p${DB_PASSWORD}

    # check settings.
    mysql -u root -p${DB_PASSWORD} -e "SELECT host, user FROM mysql.user;"
    mysql -u root -p${DB_PASSWORD} -e "show grants for sakila@'%';"
    mysql -u sakila -psakila -D sakila -e "show tables;"
  SHELL
end

ファイルを保存したらVagrantfileのファイルがあるディレクトリで、vagrant upコマンドを実行すればDBサーバの構築が完了します。

vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'mvbcoding/awslinux'...
==> default: Matching MAC address for NAT networking...
...

  DBへの接続

vagrant upコマンドによるVMの作成が完了したら、下記のコマンドでホストOSからMySQLへ接続可能です。
IPアドレスやパスワードを変更したい場合は、先ほどのVagrantfileを編集してください。

mysql -u sakila -h 192.168.33.20 -psakila

作成したVMの再起動/削除

Vagrantで作成したvmを再起動したい場合は下記のコマンドを、ホストOSから実行します。

# vmの停止
vagrant halt

# vmが停止したか確認
vagrant status

# vmの起動
vagrant up

vm自体を削除したい場合は、下記のコマンドを実行します。

# vmの削除
vagrant destroy
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。