MySQLの最新バージョン8.0系が2018年4月に正式版(General Availability)として公開されましたが、皆さんはさっそく触ってみましたでしょうか。今回は、Docker、MySQL-Sandbox、dbdeployerをLinux(CentOS)上で使って、さまざまなMySQLのバージョンを気軽に検証する方法を紹介していきたいと思います。
Dockerを使って試す
Dockerを使えば、簡単にMySQLの環境を獲得することができます。Dokcerリポジトリにはオラクル社のMySQLチームが作成したリポジトリがあるので、こちらを利用してみましょう。ただしこちらはOracle Linuxがベースとなっています。なお、Dockerそのものはインストール、起動済みと想定します。
まずはdocker pull
コマンドを使ってイメージをダウンロードします。その後、取得イメージを起動する場合はdocker run --name=<コンテナ名> -d mysql/mysql-server:<MySQLのバージョン>
を実行します。たとえばMySQL5.7.20を起動する場合は、docker run --name=mysql5720 -d mysql/mysql-server:5.7.20
のようにします。<MySQLのバージョン>となっているところはtag名で、指定しなかった場合はlatestが指定されます。使用可能なタグの一覧は、こちら を参考にしてください。今回はlatestを起動してみます。
# docker pull mysql/mysql-server
Using default tag: latest
Trying to pull repository docker.io/mysql/mysql-server ...
latest: Pulling from docker.io/mysql/mysql-server
b0efbbec3b2e: Pull complete
4d06a7b7ca82: Pull complete
7ddc24d9f468: Pull complete
8b211b61b1a0: Pull complete
Digest: sha256:f1cb1e3f0124601b1496f485e9f4401ad10138294b5a38d932089daafd555e34
Status: Downloaded newer image for docker.io/mysql/mysql-server:latest
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql/mysql-server latest 02d081b9c73e 2 months ago 300 MB
# docker run --name=mysql1 -d mysql/mysql-server
e98e7a0bfb4ec8473df4f92b30001966b45e51cb5200105ffe3cf1128f0fe171
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e98e7a0bfb4e mysql/mysql-server "/entrypoint.sh my..." 8 seconds ago Up 6 seconds (health: starting) 3306/tcp, 33060/tcp mysql1
MySQLを起動することができました。
このMySQLに接続するにはdocker logsでMySQLのrootユーザーのパスワードを確認後、docker execコマンドでmysqlクライアントを利用してアクセスします。
mysqlの起動ログからpasswordを探す
# docker logs mysql1
~
~
[Entrypoint] GENERATED ROOT PASSWORD: (IfAH3l1YgCybtiSYSYb3wp4S$4
~
~
mysqlクライアントを使ってmysqlにアクセスする
# docker exec -it mysql1 mysql -uroot -p'(IfAH3l1YgCybtiSYSYb3wp4S$4'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.11
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Dockerを使ってMySQLに接続することができました。
MySQL-Sandboxを利用する
MySQL-Sandbox は、1つのサーバー上に複数のMySQLを立ち上げる際に便利なツールになります。MySQL-Sandboxを利用すれば容易に検証用のMySQLを立ち上げ、破棄することが可能です。
MySQL-Sandboxをインストール
MySQL-SandboxはPerlで作成されているため、今回はPerlのモジュール管理ツールであるcpanminusを使ってインストールします。
# curl -L cpanmin.us | perl - App::cpanminus
# /usr/local/bin/cpanm MySQL::Sandbox
これで使用する準備は完了です。
MySQL-Sandboxを利用してMySQLを操作する
通常はMySQL-Sandboxを利用してMySQLの環境を構築するときはMySQLのbinary(tar.gz形式)をダウンロードし、make_sandbox <binaryのパス>
を指定して実行します。今回はmake_sandbox_from_url
コマンドを使い、MySQL-Sandboxの作者が事前に準備しているtarball を利用して、MySQL 5.7.22の環境を構築してみます。
$ make_sandbox_from_url 5.7.22
2018-06-19 08:21:02 URL:https://raw.githubusercontent.com/datacharmer/mysql-docker-minimal/master/dbdata/available.txt [105/105] -> "/tmp/available.txt" [1]
wget -nv -O 5.7.22.tar.gz 'https://github.com/datacharmer/mysql-docker-minimal/blob/master/dbdata/5.7.22.tar.gz?raw=true'
2018-06-19 08:21:05 URL:https://raw.githubusercontent.com/datacharmer/mysql-docker-minimal/master/dbdata/5.7.22.tar.gz [43387997/43387997] -> "5.7.22.tar.gz" [1]
Executing low_level_make_sandbox --basedir=/home/mysql/opt/mysql/5.7.22 \
--sandbox_directory=msb_5_7_22 \
--install_version=5.7 \
--sandbox_port=5722 \
--no_ver_after_name \
--my_clause=log-error=msandbox.err
The MySQL Sandbox, version 3.2.16
(C) 2006-2018 Giuseppe Maxia
Installing with the following parameters:
upper_directory = /home/mysql/sandboxes
sandbox_directory = msb_5_7_22
sandbox_port = 5722
check_port =
no_check_port =
datadir_from = script
install_version = 5.7
basedir = /home/mysql/opt/mysql/5.7.22
tmpdir =
my_file =
operating_system_user = mysql
db_user = msandbox
remote_access = 127.%
bind_address = 127.0.0.1
ro_user = msandbox_ro
rw_user = msandbox_rw
repl_user = rsandbox
db_password = msandbox
repl_password = rsandbox
my_clause = log-error=msandbox.err
init_options =
init_my_cnf =
init_use_cnf =
master =
slaveof =
high_performance =
gtid =
pre_start_exec =
pre_grants_exec =
post_grants_exec =
pre_grants_sql =
post_grants_sql =
pre_grants_file =
post_grants_file =
load_plugin =
plugin_mysqlx =
mysqlx_port =
expose_dd_tables =
custom_mysqld =
prompt_prefix = mysql
prompt_body = [\h] {\u} (\d) >
force =
no_ver_after_name = 1
verbose =
load_grants = 1
no_load_grants =
no_run =
no_show =
keep_uuid =
keep_auth_plugin =
history_dir =
do you agree? ([Y],n) Y
# Starting server
. sandbox server started
# Loading grants
Your sandbox server was installed in $HOME/sandboxes/msb_5_7_22
インストールが完了しました。
MySQLクライアントを使ってアクセスするには、sandboxes/msb_<MySQLのバージョン>
ディレクトリ内にあるuseを使ってアクセスします。
$ pwd
/home/mysql/sandboxes/msb_5_7_22
$ ./use
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.22 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql [localhost] {msandbox} ((none)) >
起動、停止のstart、stopや、挿入したデータを初期化するclearが準備されています。不要になったMySQLは、MySQL-Sandboxをインストール後に利用できるsbtoolというツールを使って、source_dirを指定して削除します。
先ほど作った検証環境を削除する
$ sbtool -o delete --source_dir=/home/mysql/sandboxes/msb_5_7_22
sandbox at </home/mysql/sandboxes/msb_5_7_22> has been remove
他にも、レプリケーションを構築した状態を準備することも可能です。
非常に便利なMySQL-Sandboxですが、現在は非推奨となっており、後述するdbdeployerが後継となっております。詳細な使い方は、MySQL-SandboxのCookbook をご覧ください。
dbdeployer
dbdeployerも、MySQL-Sandboxと同様にMySQLの検証環境を即座に提供するツールなります。こちらはMySQL-Sandboxを再設計し、Go言語で記述されています。
インストール
今回はdbdeployer1.5.2をインストールしてみます。手順は、dbdeployer の公式の手順に従って実施します
$ VERSION=1.5.2
$ origin=https://github.com/datacharmer/dbdeployer/releases/download/$VERSION
$ wget $origin/dbdeployer-$VERSION.linux.tar.gz
Resolving github.com (github.com)...
(中略)
HTTP request sent, awaiting response... 200 OK
Length: 1852743 (1.8M) [application/octet-stream]
Saving to: ‘dbdeployer-1.5.2.linux.tar.gz’
100%[===========================================================================================================================================>] 1,852,743 637KB/s in 2.8s
2018-06-12 16:34:23 (637 KB/s) - ‘dbdeployer-1.5.2.linux.tar.gz’ saved [1852743/1852743]
$ tar -xzf dbdeployer-$VERSION.linux.tar.gz
$ chmod +x dbdeployer-$VERSION.linux
$ sudo mv dbdeployer-$VERSION.linux /usr/local/bin/dbdeployer
dbdeployerは、利用するMySQLのバイナリを必要とします。今回はMySQL 8.0.11のバイナリを公式からwgetでダウンロードし、それを利用して検証環境を作成します。検証環境を作成するには、dbdeployer deploy single <MySQLバージョン>
を実行します。
$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
$ dbdeployer unpack mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
Unpacking tarball mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz to $HOME/opt/mysql/8.0.11
.........100.........200........289
$ dbdeployer deploy single 8.0.11
Database installed in $HOME/sandboxes/msb_8_0_11
run 'dbdeployer usage single' for basic instructions'
...... sandbox server started
$ cd sandboxes/msb_8_0_11
$ ls
add_option clear data grants.mysql init_db load_grants my my.sandbox.cnf mysqlsh restart sbdescription.json sb_include send_kill show_binlog show_log show_relaylog start status stop test_sb tmp use
$ ./use
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL-Sandboxと同様に検証環境を作成することができました。dbdeployer available
を利用すると、自分の環境で準備しているbinaryを確認することができます。
$ dbdeployer available
Basedir: /home/mysql/opt/mysql
5.0.96 5.7.19 5.7.22 8.0.11
MySQL-Sandboxとの比較
dbdeployerはMySQL-Sandboxを再設計して作成されたツールであるため、MySQL-Sandboxの機能は網羅されています。加えて、循環レプリケーション(all-masters)やグループレプリケーション(group) 、マルチソールレプリケーション(fan-in)の検証環境を提供することが可能になっています。
詳細なMySQL-sandboexとの比較はdbdeployerのMySQL-Sandboxとの比較 をご覧ください。
まとめ
今回はMySQLの検証環境の構築方法として、Docker、MySQL-Sandbox、dbdeployerの3つを簡単に紹介しました。MySQLのさまざまなオプションやレプリケーション環境下での検証、最新バージョンの新機能の試行などには十分に役に立つツールなので、ぜひ利用してみてください。