便利なスクリプト集 MySQL Utilities

実は1.0.0が2010年12月にリリースされていたのに全く知名度の無い"MySQL Utilities"。実は便利な機能が複数用意されているので、スクリプトを手作りしなくても済む可能性大です。またリリースに向けて新たなマイルストーンリリースが出てきたMySQL 5.6でのレプリケーションの追加機能と組み合わせる便利機能もあります。

MySQL UtilitiesはPythonで書かれたスクリプト集で、MySQL Workbenchに同梱されて配布されています。ライセンスは「もちろん」GPLです。2012年7月上旬時点での最新版は1.0.5です。また実行可能なスクリプトの他に、ライブラリとして細かな機能が用意されているため、独自のスクリプト作成にも役立ちます。


起動にはMySQL Workbenchのメニューの【Plugins】から【Start Shell for MySQL Utilities】か、MySQL Workbenchメイン画面の右上のアイコン【MySQL Utilities】を選びます。コンソールまたはコマンドプロンプトが起動し、MySQL Utilitiesの各スクリプトが使えるようになります。

MySQL Utilitiesの知名度が足りない原因の一つに、起動方法のわかりにくさが挙げられます。特に問題なのがアイコンで、ディスプレイの解像度(特に横)が低い場合などはこの【MySQL Utilities】のアイコンが表示されず、▽のプルダウンボタンを選ぶ必要があります。環境によっては▽のプルダウンあと、さらに【Next】ボタンを押さないとこのアイコンにたどり着かない場合があります。またMac OS X上ではコンソールのウィンドウがバックグラウンドで開いてしまい、起動していないように見えるのでウィンドウを切り替えてから利用してください。
▽のプルダウンボタンを押してもアイコンが見えない
【Next】ボタンを押した後



MySQL Utilitiesはスクリプトごとにオプションが異なりますが、1つポイントになるのが対象サーバの指定方法です。通常のMySQLクライアントプログラム(mysqlやmysqldumpなど)とは書式が異なっています。

mysqldump -uユーザ -pパスワード -hホスト名 -Pポート番号 …
mysqldump --user=ユーザ --password=パスワード --host=ホスト名 -port=ポート番号 ...
mysqldbexport --server=ユーザ:パスワード@ホスト名:ポート番号 ... 


スクリプトの機能はマニュアル(MySQL WorkbenchのマニュアルのChapter 13)の実行例を見ていただくとイメージしやすいかと思います。



データおよびデータベース管理

mysqldbcompare 同一サーバ内または2つのサーバ間のデータや定義の比較
mysqldbcopy 別のサーバにデータベースをコピー
mysqldbexport データとメタデータをエクスポート
mysqldbimport データとメタデータをインスポート
mysqldiff 2つのサーバ間のテーブルなどオブジェクトの定義を比較

サーバ運用各種

mysqldiskusage デーブルおよびデータファイルのサイズを表示
mysqlindexcheck インデックスの重複をチェック
mysqlmetagrep テーブル定義などのメタデータgrep (正規表現利用可)
mysqlprocgrep INFORMATION_SCHEMA.PROCESSLISTをgrep (正規表現利用可)
mysqluserclone 別のサーバにユーザアカウントををコピー

高可用性関連

mysqlreplicate レプリケーションを設定
mysqlrplcheck レプリケーションが正しく設定されているかの確認
mysqlrplshow レプリケーショントポロジ(親子関係)を図示
mysqlfailover レプリケーションの自動フェールオーバー※
switchover 手動でのレプリケーションの切り替え※
mysqlrpladmin レプリケーションの各種管理※※

MySQL 5.6.5以降のみ対応
※※ 一部機能はMySQL 5.6.5以降のみ対応

サーバ定義関連

mysqlserverclone 既存のMySQLサーバのコピーを作成
mysqlserverinfo サーバの稼働状況を表示


mysqlfailover, switchoverおよびmysqlrpladminは、MySQL 5.6.5で追加になったGTID (Global Transaction ID)を利用していますが、他のコマンドはMySQL 5.5でも利用可能です。

GTID:

5.6.5から実装された、バイナリログに書かれたトランザクション単位にユニークなIDを割り当てる機能。レプリケーション環境での状況の確認やスレーブ間での進捗の比較が簡単になります。GTIDの利用には以下のオプションの設定が必要です。

  • gtid_mode=ON - GTIDを有効にする
  • log-slave-updates - スレーブをカスケード(多段)構成にする際に必要となる設定
  • disable-gtid-unsafe-statements - GTID非対応のクエリの利用を制限。5.6.6時点では、1)トランザクション内でのCREATE TEMPORARY TABLE、2)トランザクション非対応テーブルへの全ての更新、3)CREATE TABLE ... SELECT

ちなみに、なぜMySQL UtilitiesはPythonで書かれていてPHP, PerlRubyやじゃないんだという疑問は開発チームにも多数届いているようですが、「どの言語で書いても他の言語の使い手から文句が出るから」という回答をしていたようです(笑)