スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信

次世代MySQL Sandbox! dbdeployerの使用方法について

次世代MySQL Sandbox! dbdeployerの使用方法について

私は以前からMySQL Sandboxの愛用者なのですが、
先日のPercona社のブログで、Peter Z氏が新MySQL Sandboxであるdbdeployerについて紹介していたので、ただでさえ便利なMySQL Sandboxが、どれだけ改善されているのか検証してみました。

検証環境には、CentOS 7.4を使用しました。

DB Deployer のインストール

MySQL SandboxはPerl製で、いくつかの依存パッケージとともにインストールが必要
でしたが、dbdeployerはGoで作成されており、単一のバイナリファイルとして提供されています。

インストールは簡単で、任意のディレクトリにDB Deployerのパッケージを展開するだけです。バイナリを直接実行してもいいですが、例では/usr/local/binに配置しています。

dbdeployer自体の動作のために追加のパッケージは必要ありませんが、MySQL 5.6以上の依存関係のために、事前にlibaio、libnumaをインストールしておきます。

また、MySQL自体のtar.gz版パッケージも必要です。
デフォルトでは、$HOME/opt/mysql配下に展開したパッケージが検索されます。
今回は、MySQL、Percona、MariaDBのパッケージを用意しました。
いずれも2018/05/28現在の最新版を使用しています。

展開先ディレクトリも作成しておきましょう。

MySQL Sandboxは、make_sandboxコマンドでtar.gzファイルを直接指定すれば自動で展開、起動までをしてくれましたが、dbdeployerでは unpackサブコマンドで展開を先に行う必要があるようです。

進捗の数値の意味は不明ですが、解凍が完了すると、$HOME/opt/mysql配下にディレクトリが作成されていると思います。

同様にすべてのパッケージを展開しますが、一つ問題があります。

通常のコマンドで展開した場合は、MySQLとPercona Serverのバージョン体系は同じなので、どちらのパッケージなのかわからなくなってしまいます。

dbdeployerにはそのような場合に対応できるように –perfix オプションが用意されています。

–prefix=percona_とすることで、ディレクトリ名の先頭に指定した文字列を付けて展開します。

展開したパッケージは available で確認可能です。

インスタンスの起動

dbdeployerでは、single、multiple、replicationの3パターンの構築方法が用意されています。

まずは、単純にMySQL 8.0.11のシングルインスタンスを起動してみます。

無事起動したようです。
作成済みのインスタンスは、sandboxesで確認できます。

インスタンスへの操作方法は、usageで確認します。

作成済みのインスタンスのディレクトリは、デフォルトで$HOME/sandboxes/msb_$VERSION です。
MySQL Sandboxと同じディレクトリ構造のようです。
バージョンのドット(.)はアンダースコア(_)に変換されますので、ご注意ください。

インスタンスに接続してみましょう。

正常に起動し、接続できました。

それでは、MariaDB、Percona Serverも同様に構築してみましょう。

すべてのバージョンの環境が非常に簡単に構築できました。

インスタンスへの操作

個々のインスタンスへの操作は、$HOME/sandboxes/msb_$VERSIONディレクトリ配下のスクリプト(start/stop/restart/status etc..)を使用して行います。

このあたりについては、MySQL Sandboxと変更はありません。

すべてのインスタンスに対する操作を、globalで行うことが可能となっています。

今回構築した全環境のパラメータを1回の操作で確認することができ、検証用途では非常に便利です。
useの他に、restart、start、stop、status、test、test_replicationのコマンドが実行できます。

環境の削除

MySQL Sandboxでは環境の削除は、sbtoolを使用していましたが、dbdeployerではサブコマンドに統合されました。
指定するのは、環境のディレクトリ名になりますので、sandboxesで事前に確認します。

非同期レプリケーション環境の作成

インスタンスの構築の際に、replicationが指定可能という事を記載しました。

実際に、レプリケーション環境が構築できるか試してみましょう。

Master 1 + Slave 2 の非同期レプリケーション環境が作成されました。
操作はMySQL Sandboxと同様です。

しかし、usage multipleを見ると、対象をmaster/slaveに絞ってSQLを実行する方法が追加されていました。

また、check_slaves/check_masterスクリプトが追加されていて、非常に便利に
ステータスを確認できました。

グループレプリケーション環境の作成

dbdeployerではMySQL Group Replicationも、簡単に作成できます。
構築は–topology=groupを指定するだけです。
さらに、シングルプライマリ、マルチプライマリも選択可能です。

通常のレプリケーションの処理を行いサーバを起動した後、追加の処理でグループレプリケーションを構築しています。

シングルプライマリの場合は、以下のコマンドとなります。

マルチソースレプリケーション環境の作成

マルチソースレプリケーション環境もコマンド1つで作成可能です。

マルチソースレプリケーションは、Fan-in レプリケーションとも呼ばれ、dbdeployerでは–topology=fan-inで指定します。

MySQL Sandboxとの機能差異

下記のページに網羅されています。

https://github.com/datacharmer/dbdeployer/blob/master/docs/features.md

今後のプランとしては、Galera Replication/MySQL Clusterの対応、リモートに配置した
tar ballのデプロイ等があり、非常に楽しみです。

bash-completion対応

コマンドのサブコマンドやオプションをタブ補完するために、bash-completionのスクリプトを提供しているコマンドは数多くありますが、dbdeployerもbash_completion用のスクリプトがあります。

利用には、別途生成する作業が必要です。

生成のためには、パッケージ名に-docsとついたほうのバイナリを使用する必要があります。
-docsパッケージは、通常のdbdeployerとしても使用可能ですが、いくつかの追加機能があります。
ここでは簡単にbash_completionの設定のみご紹介しますが、興味があればドキュメントを参照ください。

treeコマンドは、dbdeployerの各APIを網羅するためのコマンドです。
treeに–bash-completionオプションをつけて実行すると、スクリプトが生成されます。

出力結果の通り、/etc/bash_completion.dにスクリプトをコピーします。

現在のシェルで補完を有効化するために、スクリプトを読み込みます。

補完が有効化されます。

まとめ

MySQL SandboxのReDesignというだけあり、MySQL Sandboxでできていたことは、ほぼすべて網羅されているようでした。

また、比較的新しい機能(MySQL GROUP REPLICATION/Multi Source Replication/X Plugin)についても網羅され、更に便利になっていました。

将来的には、あらゆるMySQL Fork製品を場所、構成問わず1コマンドでデプロイできるようなツールになりえる可能性を感じました。

いくつものバージョンのMySQLの検証環境を構築する必要がある、MySQL Forkの製品を横に並べて機能を比較検討されたい等のニーズがある方は、ぜひ一度お試しいただければと思います。


MySQL

 

Return Top