MySQL Sandbox入門の入門

Published: 2016年5月29日 by tomsato

概要

MySQL Sandboxを使うと凄く簡単にMySQL環境の準備を行うことができるので

入門の入門として概要がわかるように簡単に使ってみます

何ができる?簡単に

  • 簡単にMySQLの環境準備を行える
  • 1つのサーバ上に複数のバージョンのMySQLを用意することができる
  • レプリケーション構成も1コマンドで簡単に準備できる

準備

cpanmを用意

$ cd /usr/bin/
$ sudo curl -LOk http://xrl.us/cpanm
$ sudo chmod +x cpanm
$ sudo yum install -y perl-devel

MySQL Sandboxを入れてみる

$ sudo cpanm MySQL::Sandbox
--> Working on MySQL::Sandbox
Fetching http://www.cpan.org/authors/id/G/GM/GMAX/MySQL-Sandbox-3.1.07.tar.gz ... OK
Configuring MySQL-Sandbox-v3.1.07 ... OK
Building and testing MySQL-Sandbox-v3.1.07 ... OK
Successfully installed MySQL-Sandbox-v3.1.07
1 distribution installed
※ 注意点
サーバの時刻が凄くずれているとcpanmが失敗していた
dateコマンドを叩いて時刻が現在時刻ではない場合は時刻をあわせてあげる</p>

以下時刻を合わせるメモ

Docker上で作業をする場合は、docker runを行う際に「--privileged」オプションを付与してコンテナに権限を与える

$ sudo yum install -y ntp
$ sudo ntpdate ntp.nict.jp
$ date
Sun May 29 07:46:02 UTC 2016

MySQL Sandboxを使うための準備

$ mkdir -p $HOME/opt/mysql $HOME/opt/sandboxes
// 適宜 .bash_profileにも記述する
$ echo 'export SANDBOX_BINARY=$HOME/opt/mysql' >>  ~/.bash_profile
$ echo 'export SANDBOX_HOME=$HOME/opt/sandboxes' >>  ~/.bash_profile
$ source ~/.bash_profile

インスタンスを作成する

現在使っているMySQLのバージョンに合わせてソースを取得する

$ cd $SANDBOX_HOME
$ curl -L -o mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz http://www-jp.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz/from/http://ftp.jaist.ac.jp/pub/mysql/

インスタンスの作成

// $SANDBOX_BINARY/5.6.30にサーバー
// $SANDBOX_HOME/msb_5_6_30以下にインスタンスが作成される
$ make_sandbox mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz

mysqlクライアントを起動

$ $SANDBOX_HOME/msb_5_6_30/use
mysql [localhost] {msandbox} ((none)) >

その他

// クライアントの停止、この状態ではuseは使えない
$ msb_5_6_30/stop
// クライアントの起動
$ msb_5_6_30/start
// 起動状態の確認
$ msb_5_6_30/status
msb_5_6_30 on
// 初期化
$ msb_5_6_30/clear

設定を書き換えてみる

// 設定ファイルの書き換え
$ vim msb_5_6_30/my.sandbox.cnf
// restart・反映
$ msb_5_6_30/restart

$ $SANDBOX_HOME/msb_5_6_30/use
// 設定の確認
> show global variables like 'hoge';

sandboxの削除

// 「--source_dir」の指定は絶対パスで指定しなければいけない
$ sbtool -o delete --source_dir $SANDBOX_HOME/msb_5_6_30

複数のsandboxを用意する場合

// 「--how_many_nodes」で何台ノードを用意するかを指定できる
// 一度ソースを使ってインスタンスを作成した場合、2回目からは「5.6.30」などバージョンを指定するだけでいい
$ make_multiple_sandbox --how_many_nodes=2 5.6.30
installing node 1
installing node 2
group directory installed in $HOME/opt/sandboxes/multi_msb_5_6_30

// 「_all」というコマンドは全ノードに対して実行するコマンド
$ ls -l multi_msb_5_6_30/
-rwxr-xr-x. 1 tomsato tomsato  539 May 29 09:02 check_slaves
-rwxr-xr-x. 1 tomsato tomsato  383 May 29 09:02 clear_all
-rw-rw-r--. 1 tomsato tomsato 5254 May 29 09:02 connection.json
-rw-rw-r--. 1 tomsato tomsato  418 May 29 09:02 default_connection.json
-rwxr-xr-x. 1 tomsato tomsato   60 May 29 09:02 n1
-rwxr-xr-x. 1 tomsato tomsato   60 May 29 09:02 n2
drwxrwxr-x. 4 tomsato tomsato 4096 May 29 09:02 node1
drwxrwxr-x. 4 tomsato tomsato 4096 May 29 09:02 node2
-rw-rw-r--. 1 tomsato tomsato 1088 May 29 09:02 README
-rwxr-xr-x. 1 tomsato tomsato  228 May 29 09:02 restart_all
-rwxr-xr-x. 1 tomsato tomsato  403 May 29 09:02 send_kill_all
-rwxr-xr-x. 1 tomsato tomsato  383 May 29 09:02 start_all
-rwxr-xr-x. 1 tomsato tomsato  346 May 29 09:02 status_all
-rwxr-xr-x. 1 tomsato tomsato  378 May 29 09:02 stop_all
-rwxr-xr-x. 1 tomsato tomsato  325 May 29 09:02 use_all

簡単にレプリケーション構成を用意する

インスタンスの用意、レプリケーションの設定を行う

$ make_replication_sandbox --how_many_slaves=1 5.6.30

レプリケーションの設定を確認する

$ rsandbox_5_6_30/check_slaves
master
port: 22695
             File: mysql-bin.000001
         Position: 2698
slave # 1
port: 22696
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2698
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 2698

ディアルマスターのレプリケーションを作成する

$ make_replication_sandbox --circular=2 5.6.30

$ rcsandbox_5_6_30/check_slaves
node # 1
port: 17001
             File: mysql-bin.000001
         Position: 120

              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 120
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 120
node # 2
port: 17002
             File: mysql-bin.000001
         Position: 120

              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 120
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 120

// ディアルマスターになっていることを確認する (お互いのportを見合っている)
$ rcsandbox_5_6_30/n1 -e "show global variables like 'port'; show slave status\G" | grep -i port
port	17001 // 自分のport
Master_Port: 17002 // レプリケーション元のport
$ rcsandbox_5_6_30/n2 -e "show global variables like 'port'; show slave status\G" | grep -i port
port	17002 // 自分のport
Master_Port: 17001 // レプリケーション元のport

レプリケーションのテスト

$ rcsandbox_5_6_30/test_replication
# Master log: mysql-bin.000001 - Position: 6404 - Rows: 20
# Testing slave #1
ok - Slave #1 IO thread is running
ok - Slave #1 SQL thread is running
ok - Table t1 found on slave #1
ok - Table t1 has 20 rows on #1
# TESTS :     4
# FAILED:     0 (  0.0%)
# PASSED:     4 (100.0%)
# exit code: 0

参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧