MySQL 5.6での機能強化点(その3)- 人気のレプリケーションが更に機能強化
レプリケーション:耐障害性、信頼性の向上
GTIDとレプリケーションユーティリティ
複数台でレプリケーションを構成している場合の運用管理を簡素化するために、GTID(グローバルトランザクションID)が実装されました。GTIDはトランザクションを一意に識別できる識別子です。従来のレプリケーションではバイナリログのポジションの情報を使ってレプリケーションがどこまで伝搬されたのかを管理しているため、スレーブを新しいマスターに昇格させる場合などにポジションの情報を確認する必要があり、確認作業が煩雑になっていました。
GTIDを使うと、この課題を解決できます。GTIDにより、スレーブが既に実行完了したトランザクションを一意に識別できるようになったため、ポジションの情報を確認することなくスレーブを新しいマスターに昇格させることが可能です。また、GTIDを使ってレプリケーションを運用している場合に、フェイルオーバーを自動化できるmysqlfailoverや計画停止時のスイッチオーバー/スイッチバックを実現できるmysqlrpladminといったレプリケーションユーティリティも用意しています。これらのユーティリティの実体は、pythonでかかれたスクリプトのため、スクリプトをカスタマイズして活用頂くことも可能です。
GTIDを使ったレプリケーションの詳細については、こちらを参照下さい。
クラッシュセーフなスレーブ
レプリケーション実行時、どこまでバイナリログを伝搬したかというポジションの情報や、伝搬されたログファイルの内容をどこまでスレーブに反映したかというポジションの情報は、データベースのデータを格納するファイルとは別のファイルに記録されています。そのため、データベース上のデータとポジションの情報は同時に変更できません。
それにより、スレーブのサーバーにおいてクラッシュが発生した場合に、データは更新されたがポジションの情報は更新されていない、という不整合が発生する可能性があります。この場合、不整合を取り除かないとレプリケーションを再開できないため、ポジションの情報を修正してからレプリケーションを再開したり、スレーブを再構築したりする必要があります。
この問題を解決するために、MySQL 5.6ではポジションの情報をInnoDB上のテーブルに記録し、データの変更とポジション情報の変更をトランザクショナルに書き込みできるようにしました。これにより、スレーブサーバーがクラッシュした場合でも、データとポジションの情報の整合性を保つことができ、スレーブをクラッシュセーフな状態にできます。
スレーブをクラッシュセーフな状態にするためには、以下のパラメータを設定します。
- relay_log_info_repository=TABLE
※設定可能な値はFILE、TABLE (デフォルト値はFILE)
詳細はこちらを参照下さい。
- relay_log_recovery=ON
※設定可能な値はON、OFF (デフォルト値はOFF)
詳細はこちらを参照下さい。
チェックサムの追加
バイナリログが破損した場合に破損を検出し易くするために、バイナリログにチェックサムを追加できるようになりました(厳密には、追加できる誤り訂正符号はチェックサムではなくCRC32になります)。
チェックサムはデフォルトで追加されています。チェックサムを無効化したい場合は、以下のパラメータを設定します。
- binlog_checksum=NONE
※設定可能な値はCRC32、NONE (デフォルト値はCRC32)
詳細はこちらを参照下さい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- MySQL Clusterにおけるレプリケーションの基礎
- MySQL Clusterにおけるレプリケーション環境構築例
- MySQL5.6- さらなる機能追加とNoSQL
- 高可用性とデータ・シャーディングを実現できるMySQL Fabricとは?
- オラクル、「MySQL 5.7 Development Milestone Release(DMR)」をリリース
- ここが新しい!MySQL 5.1
- MySQL5.5- 性能改善と可用性向上
- PostgreSQLクラスタの動向
- Pythonで作られた便利なコマンドラインツール MySQL Utilities
- MySQLのリアルタイムモニタリングに「innotop」