MySQL Sandbox の使用方法
オフィシャル
MySQL Sandboxについて
MySQL Sandboxとは、検証用MySQL環境を容易に構築することを目的としたPerl製の
ツールです。
単一インスタンス・マスタースレーブ構成・双方向レプリケーションなどが1コマンドで
作成できます。
さらに、作成した環境を利用・管理するためのツール群も用意されています。
MySQL Sandboxのインストール
今回検証を行った環境はCentOS 7.3です。
1 2 |
$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) |
まずはMySQL::Sandboxが必要とするパッケージをインストールします。
1 |
$ sudo yum install -y perl-Test-Simple perl-ExtUtils-MakeMaker |
今回はcpanmを利用し、CPANからインストールします。
1 2 3 4 5 6 7 8 9 10 11 |
$ mkdir bin && cd ~/bin $ curl -LOk http://xrl.us/cpanm $ chmod +x cpanm $ cpanm --sudo MySQL::Sandbox --> Working on MySQL::Sandbox Fetching http://www.cpan.org/authors/id/G/GM/GMAX/MySQL-Sandbox-3.2.13.tar.gz ... OK Configuring MySQL-Sandbox-v3.2.13 ... OK Building and testing MySQL-Sandbox-v3.2.13 ... OK Successfully installed MySQL-Sandbox-v3.2.13 1 distribution installed |
Sandboxの作成
まずは、Sandboxを作成するためのベースとなるMySQLのバイナリを入手します。
MySQL::Sandboxでは、rpmやdebパッケージは使用できません。
MySQLダウンロードサイトから「Linux – Generic」版のtar.gzファイルを入手します。
1 |
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz |
Sandboxの作成方法はいくつかあり、最も単純な方法はmake_sandboxコマンドで
tar.gzのファイルを指定することです。
指定したtar.gzファイルを解凍、設定を表示し確認のプロンプトが表示されます。
Yを押して次に進むと作成され、起動した状態になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$ mkdir -p $HOME/opt/mysql $ make_sandbox --export_binaries mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz unpacking /home/testuser/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz Executing low_level_make_sandbox --basedir=/home/testuser/opt/mysql/5.7.19 \ --sandbox_directory=msb_5_7_19 \ --install_version=5.7 \ --sandbox_port=5719 \ --no_ver_after_name \ --my_clause=log-error=msandbox.err The MySQL Sandbox, version 3.2.13 (C) 2006-2017 Giuseppe Maxia Installing with the following parameters: upper_directory = /home/testuser/sandboxes sandbox_directory = msb_5_7_19 sandbox_port = 5719 check_port = no_check_port = datadir_from = script install_version = 5.7 basedir = /home/testuser/opt/mysql/5.7.19 ...省略 do you agree? ([Y],n) Y # Starting server .. sandbox server started # Loading grants Your sandbox server was installed in $HOME/sandboxes/msb_5_7_19 |
解凍先は、特に指定がない場合tar.gzのファイルと同じディレクトリですが、
make_sandboxがデフォルトで探索してくれるディレクトリであるSANDBOX_BINARY
配下(デフォルトは$HOME/opt/mysql)に解凍したほうが楽です。
そのため、$HOME/opt/mysqlを作成し、make_sandboxには–export_binaries
オプションをつけています。
–export_binariesはSANDBOX_BINARY配下に解凍するためのオプションです。
MySQL::Sandboxは検証用途ですので、一般ユーザーでの使用が想定されており、
rootユーザーで操作をすると以下のメッセージが表示されます。
1 2 |
make_sandbox is not work by root. beause set SANDBOX_AS_ROOT and its value is not 0. |
rootユーザーで利用したい場合は環境変数SANDBOX_AS_ROOTに0以外を指定します。
1 |
$ export SANDBOX_AS_ROOT=1 |
tar.gzのファイルを一度解凍すれば、MySQLのバージョンのディレクトリが作成
されていますので、以降は解凍されたディレクトリ名を指定してSandboxの作成が
可能になります。
また、より細かい指定をしたいという場合、make_sandboxが内部的に呼び出して
いるlow_level_make_sandboxのオプションも使用可能です
(low_level_make_sandbox –helpで確認できます)。
1 2 3 4 5 6 |
# バージョンを指定 $ make_sandbox 5.7.19 # low_level_make_sandboxのオプションを使用 # (--no_confirm:設定確認のプロンプトを表示しない --no_run:起動確認後に停止する) $ make_sandbox 5.7.19 -- --no_confirm --no_run |
Sandboxを作成すると、SANDBOX_HOME(デフォルトでは$HOME/sandboxes)の配下に
msb_MAJER-VERSION_MINOR-VERSION_REVISION
というディレクトリが作成されます。
ここにMySQL::Sandboxのツール、MySQLのデータディレクトリ、各種設定ファイル
などが配置されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
$ tree -F -L 1 $HOME/sandboxes/msb_5_7_19 msb_5_7_19 ├── add_option* ├── change_paths* ├── change_ports* ├── clear* ├── connection.json ├── data/ ├── default_connection.json ├── grants_5_7_6.mysql ├── grants.mysql ├── json_in_db* ├── load_grants* ├── msb* ├── my* ├── mycli* ├── my.sandbox.cnf ├── mysqlsh* ├── old_data/ ├── proxy_start* ├── README ├── restart* ├── send_kill* ├── show_binlog* ├── show_relaylog* ├── start* ├── status* ├── stop* ├── tmp/ ├── use* └── USING |
なお、MariaDBやPerconaServerも同様の手順で構築が可能です。
起動・停止
基本的にはSandboxのディレクトリ以下のツールを使用します。
stop/start/status/restartなどがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 停止 $ $HOME/sandboxes/msb_5_7_19/stop # ステータス確認 $ $HOME/sandboxes/msb_5_7_19/status msb_5_7_19 off # 起動 $ $HOME/sandboxes/msb_5_7_19/start .. sandbox server started # 再起動 $ $HOME/sandboxes/msb_5_7_19/restart .. sandbox server started |
接続
前項と同様に、Sandboxのディレクトリ以下のツールを使用します。
useは、mysqlクライアントのラッパーです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ $HOME/sandboxes/msb_5_7_19/use Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.19-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2017, 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)) > |
useコマンドには、通常のmysqlコマンドのようにオプションを渡すことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ $HOME/sandboxes/msb_5_7_19/use --default-character-set=sjis mysql -- 省略 mysql [localhost] {msandbox} (mysql) > status -------------- /opt/mysql/5.7.19/bin/mysql Ver 14.14 Distrib 5.7.19, for linux-glibc2.5 (x86_64) using EditLine wrapper Connection id: 4 Current database: mysql Current user: msandbox@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.19-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: sjis Conn. characterset: sjis UNIX socket: /tmp/mysql_sandbox5719.sock Uptime: 14 min 59 sec Threads: 1 Questions: 44 Slow queries: 0 Opens: 136 Flush tables: 1 Open tables: 129 Queries per second avg: 0.048 -------------- |
デフォルトの接続ユーザーはmsandboxです。
msandbox@localhostユーザーにはALL権限が与えられていますが、 WITH GRANT
OPTIONは与えられていないため、権限周りの操作はroot@localhostユーザーで
行います。
msandboxユーザー、rootユーザーのパスワードはともにmsandboxなので、useコマ
ンドにユーザーを指定するだけでログイン可能です。
1 2 3 4 5 6 7 8 |
$ $HOME/sandboxes/msb_5_7_19/use -uroot -- 省略 mysql [localhost] {root} ((none)) > select current_user; +----------------+ | current_user | +----------------+ | root@localhost | +----------------+ |
これまでに説明したツールを使うことで基本的な操作は可能ですが、複数環境を
作成すると、毎回ディレクトリパスを指定してツールを起動するのは大変です。
msbというツールにより、接続や起動をより簡易に行えます。
引数にはSandbox名、もしくは短縮バージョン名を指定します。
1 2 3 4 5 6 7 8 |
$ which msb /usr/local/bin/msb -- 短縮バージョン名 $ msb 5719 -- Sandbox名 $ msb msb_5_7_19 |
msbは、もし接続先のインスタンスが停止していた場合、起動してから接続します。
useコマンドと同様に、通常のMySQLオプションを渡すことが可能です。
なお、SANDBOX_HOME/<各sandbox名>ディレクトリにもmsbというツールがあります
が、前述のmsbと内容は異なり、stop/start/statusなどのツールのラッパーと
なっています。
Sandboxの削除
必要なくなったSandboxはsbtoolにより削除します。
sbtoolは主にSandbox自体の管理操作を行うためのツールです。
1 2 3 4 5 |
$ sbtool -o delete --source_dir=$HOME/sandboxes/msb_5_7_19 sandbox at </home/testuser/sandboxes/msb_5_7_19> has been removed $ ls $HOME/sandboxes/msb_5_7_19 ls: cannot access /home/testuser/sandboxes/msb_5_7_19: No such file or directory |
MySQL 複数インスタンスの作成
MySQL Sandboxではマルチインスタンス構成を1コマンドで作成できます。
レプリケーション構成である必要がなければ、make_multiple_sandbox(もしくは
make_multiple_custom_sandbox)
レプリケーション構成が必要ならmake_replication_sandboxを使用します。
デフォルトでは、マスターとスレーブ2台の構成です。
1 2 3 4 5 6 7 8 9 10 11 |
$ make_replication_sandbox 5.7.19 installing and starting master installing slave 1 installing slave 2 starting slave 1 .. sandbox server started starting slave 2 .. sandbox server started initializing slave 1 initializing slave 2 replication directory installed in $HOME/sandboxes/rsandbox_5_7_19 |
スレーブの数を変更したい場合–how_many_slavesというオプションにより指定できます。
1 2 3 4 5 6 7 |
$ make_replication_sandbox --how_many_slaves=1 5.7.19 installing and starting master installing slave 1 starting slave 1 ..... sandbox server started initializing slave 1 replication directory installed in $HOME/sandboxes/rsandbox_5_7_19 |
双方向レプリケーション、環状レプリケーションは以下のように作成します。
1 2 3 4 5 |
# 双方向レプリケーション $ make_replication_sandbox --master_master 5.7.19 # 環状レプリケーション $ make_replication_sandbox --circular=3 5.7.19 |
接続は単一インスタンスの場合と同様にuse、もしくはmsbを使います。
短縮バージョン名指定の場合、1文字目がrになります。
引数を渡さないとマスターに、引数に番号を渡すと各スレーブに接続されます。
1 2 3 4 5 6 7 8 |
-- マスターに接続 $ msb r5719 -- スレーブ(1)に接続 $ msb r5719 1 -- スレーブ(2)に接続 $ msb r5719 2 |
マルチインスタンス構成の場合、ディレクトリの構成が異なります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ tree -L 1 -F sandboxes/rsandbox_5_7_19/ sandboxes/rsandbox_5_7_19/ ├── check_slaves* ├── clear_all* ├── connection.json ├── default_connection.json ├── enable_gtid* ├── initialize_slaves* ├── m* ├── master/ ├── n1* ├── n2* ├── n3* ├── node1/ ├── node2/ ├── README ├── restart_all* ├── s1* ├── s2* ├── send_kill_all* ├── start_all* ├── status_all* ├── stop_all* ├── test_replication* └── use_all* |
新たにデータディレクトリが3つ(master/node1/node2)作成されています。
useコマンドがありませんが、代わりにm、n1、n2、n3というコマンドを使用します。
mはマスターへ接続。n1は1番目のノード(=マスター)、n2,n3はスレーブへの接続と
なります。
msbでは引数なしがマスター、1がスレーブの1番目となっていたため、混乱しない
ようにしてください。
xxx_allのコマンドは、このSandbox内の全インスタンスに処理を行うツールです。
ちなみに、Sandbox配下にもxxx_allツールは用意されており、全Sandbox、全イン
スタンスへ処理を行うことが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# 全ノードのユーザー一覧を取得 $ $HOME/sandboxes/rsandbox_5_7_19/use_all "select user,host from mysql.user" # master user host msandbox 127.% msandbox_ro 127.% msandbox_rw 127.% rsandbox 127.% msandbox localhost msandbox_ro localhost msandbox_rw localhost mysql.sys localhost root localhost # server: 1: user host msandbox 127.% msandbox_ro 127.% msandbox_rw 127.% rsandbox 127.% msandbox localhost msandbox_ro localhost msandbox_rw localhost mysql.sys localhost root localhost |
以上がMySQL Sandboxの簡易的な使用方法になります。
検証環境の作成方法も様々ありますが、非常に手軽に検証環境を作成できるツール
であると感じました。
検証をしたいためにMySQLを構築しようとしてそれ自体にハマったなどという事態
を避けるためにも導入を検討してみてはいかがでしょうか。