便利なスクリプト集 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, PerlやRubyやじゃないんだという疑問は開発チームにも多数届いているようですが、「どの言語で書いても他の言語の使い手から文句が出るから」という回答をしていたようです(笑)