MySQL Sandbox入門の入門

■ 目次

  1. 概要
  2. 何ができる?簡単に
  3. 準備
  4. インスタンスを作成する
  5. 簡単にレプリケーション構成を用意する
  6. 参考

■ 概要

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コマンドを叩いて時刻が現在時刻ではない場合は時刻をあわせてあげる

以下時刻を合わせるメモ

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

■ 参考


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です