MySQL 5.6のレプリケーションに関する変更点ではGTID(Global Transaction Identifiers)が追加されたのが大きなポイントとなります。GTIDについてはMySQL Global Business Unit MySQL Senior Sales Consulting Manager 梶山隆輔氏(写真)が詳しく解説してくれました。
GTIDはコミットごとにトランザクションを一意に識別するためのIDです。実際のGTIDはサーバごとに一意なIDと、トランザクション実行ごとに1つずつカウントアップする番号の組み合わせで構成され、バイナリログに記録されます。
ちなみにMySQLのレプリケーションはスレーブからマスターに呼びかけることで処理が開始されるようになっています。つまりスレーブから「データちょうだい」と誘いをかけ、マスターが「はいどうぞ」と呼応する形です(そのためMySQLのレプリケーションはスレーブの処理の速さで決まります。マスターで頻度を指定することはできません)。
実際、MySQL 5.6以降のレプリケーションでは、スレーブがGTIDで持っているデータの範囲をマスターに伝え、マスターがその範囲以降のトランザクションをスレーブに送るという形で処理を進めます。このGTIDにより、複数台で構成するレプリケーション環境でもトランザクションの追跡や比較が容易になるのです。
またGTIDはどこまでデータをレプリケーションしたのか判別しやすくなることから、フェイルオーバー時にも役立ちます。従来はbinlogのポジションを使っていましたが、サーバIDとトランザクション番号で構成されているGTIDの方がより分かりやすくなるはずです。
複数台で構成するレプリケーションについて、少し補足しておきましょう。例えば「マスター → マスター/スレーブ → スレーブ」となるような多段型(カスケード型)のレプリケーション方法があります。多段にした場合、段の中間に位置するものは、マスターに対してはスレーブと見なせますが、さらにその下にあるスレーブに対してはマスターでもあるという構成でます。
ほかにはリング型の構成でレプリケートする構成も考えられます。サーバレプリケーションでは、このように多様な構成(トポロジー)がとれますが、鉄則は「マスターは複数のスレーブを持てるが、スレーブは一度に1つのマスターしか持てない」です。
ここでちょっと小ネタを。MySQLのストレージエンジンで「ブラックホール」というものがあるのをご存じでしょうか。データを追加しても追加しても、データそのものは記録されずに消えていくというまさにブラックホールのようなストレージエンジンです。バイナリログだけに記録が残ります。
実のところ、筆者は「いったいなんのためにあるのだろうか?」と長年の謎でしたが、ここで初めて知りました。先述の多段構成の中間のサーバでブラックホール型ストレージエンジンが使えるそうです。中間のサーバでは末端のサーバにバイナリログを渡せばいいだけなので、データを持つ必要がありません。ですから、ブラックホールを使っておいてデータ量を削減するのです。なるほどですね。
GTIDの登場でMySQL Utilityの利便性も高まりそうです。MySQL Utilityとは2010年からあるツールで、実体はMySQLを管理するためのPythonスクリプト集です。MySQL Workbench 5.2.31以降に同梱されています。
MySQL Utilityではデータベースのデータや定義を比較、テーブルやデータファイルのサイズ表示、レプリケーションの各種設定や管理などが行えます。複製のトポロジ(親子関係)を図示することもできます。何よりもうれしいのは、GTIDが有効になったMySQL 5.6以降で自動フェイルオーバーができるようになったことではないでしょうか。MySQL Workbench 5.2.39以降で利用可能だそうです。
なおMySQL Utilityはパソコン画面の横幅が狭いとWorkbench画面上部からアイコンが隠れてしまうことがあるそうです。もしWorkbenchが新しいのにMySQL Utilityが見当たらない場合は画面右上の「▼」をクリックしてMySQL Utilityのアイコンを探してみてください。
そのほかのMySQL関連の最新動向もおさらいしておきましょう。
MySQL Enterprise版ではMySQL Enterprise Auditという監査機能が提供されるようになりました。監査が必要なアプリケーションでもMySQLを使えるようになります(商用版 MySQL 5.5.28以降で利用可能)。MySQL Enterprise High Availabilityも商用版の新しい機能です。こちらはOracle LinuxとDRBD(Distributed Replicated Block Device)を使い、高可用性を実現します。詳しくはホワイトペーパーも参考にしてください。
MySQL Clusterについては、最新版が2012年に7.2が出たところですが、もはや次バージョンとなるの7.3 DMR(いわばβ版)が出ました。そこで新機能として登場したのが「外部キー」です。
MySQL Clusterが他のアプリケーションで使いやすくなりそうです。SQLおよびNoSQLいずれのAPIからも利用可能です。またJavaScriptからMySQL Clusterに直接アクセスするためのNode.js NoSQL APIも利用可能となるようです。そのほかインストーラにも改善が加えられるようです。
最後にMySQL関係の話題をもう1つ。ここのところ、MySQL関係者の表彰が続きました。2月19日、日本OSS推進フォーラムは日本OSS貢献者賞および奨励賞を発表しました。そのなかでMySQL初期の日本語化パッチを作成したとして日本MySQLユーザ会代表のとみたまさひろさんが貢献者賞、MySQLでシャーディングを行うストレージエンジンSpiderおよび全文検索機能を提供するMySQLのストレージエンジンmroongaの開発に関わったとして斯波健徳さんが奨励賞を受賞しました。なおmroongaと関係の深いgroonga開発チームも奨励賞を受賞しました。
またOracle ACEにOracle DatabaseとMySQLに詳しいNTTコムウェアの平塚貞夫さんが認定されました。平塚さんというより「SH2の日記」の方がなじみ深いかもしれませんね。Oracle ACEでMySQL分野のエンジニアが認定されるのは初めてだそうです。
今回受賞された皆さま、おめでとうございます。これからもご活躍を期待しております。
Copyright © ITmedia, Inc. All Rights Reserved.