MySQL道普請便り

第74回 さまざまなMySQLのバージョンを試す

この記事を読むのに必要な時間:およそ 6 分

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をご覧ください。

著者プロフィール

深町日出海(ふかまちひでみ)

GMOメディア株式会社のデータベースエンジニア。主にOracleとMySQLを担当。得意なプログラム言語はJava。MySQLの好きなところはTABLEやINDEXの識別子に64byteまで使えるところ。

Twitter:@lhfukamachi

コメント

コメントの記入