第2回目のMySQL Casual Talks in Fukuokaが開催されたので、
前回に引き続きLTさせてもらいました。

主催者の@Spring_MTさん、会場をご提供いただいた日本オラクルさん、
参加された皆さん、ありがとうございました!

ATNDはこちら
MySQL Casual Talks in Fukuoka vol.2

5.6では様々な改善・機能追加が行われていますが、個人的にはレプリケーション周りに
注目しています。

詳しくは@RKajiyamaさん、@nippondanjiさんのブログエントリ、スライドを参照してください。

MySQL Connect 2012での発表事項

開発スピードアクセル全開ぶっちぎり!日本よ、これがMySQL 5.6だッ!!

MySQL 5.6新機能解説

.ibdファイルのエクスポート・インポートが出来るようになるので、
Hadoopで処理した結果を.ibdファイルとして直接書き出してみたくて、
.ibdファイルのフォーマットを探していたのですが、中の人に質問してみたところ、
今はソースを読むしかないそうです。
けど、やっぱりそういう要望は多いそうなので、そのうちドキュメントが出ると思います。

さて、今回僕はGTIDを使ったレプリケーションを構成して、
mysqlfailoverで自動フェールオーバーを試したのですが、構成を組むのに結構手間取りました><
さらに、mysqlfailoverで自動フェールオーバーがちゃんと動かせなかったです(ToT)
今のところ、まだ情報が少ないのでGAが出てからもう一度チャレンジしてみます。

■試してみてわかった事
・GTIDを使ったレプリケーションの場合、
  MASTER_LOG_FILE, MASTER_LOG_POSの代わりに、MASTER_AUTO_POSITION=1を指定する。

・マスタから物理ファイルをスレーブにコピーした後、auto.cnfserver-uuidを書き換えないと、START SLAVE時にエラーが出る。

gtid-mode=ONと
disable-gtid-unsafe-statementsをmy.cnfに書いた状態では、mysql_install_dbとmysql_secure_installationの
実行時にエラーが出る。

・それでもSTART SLAVEでエラーが出て、
レプリケーション出来ない。mysql_install_dbとmysql_secure_installationを実行した時のbinlogも実行されているっぽい。my.cnfにreplicate-ignore-db=information_schema,performance_schema,mysqlを書いて、とりあえず回避した。

・my.cnfにmaster-info-repository=TABLE
を書かないとmysqlfailoverでエラーが出る。

・Delayed Replication(意図的なレプリケーション遅延)の設定方法はCHANGE MASTER TOでMASTER_DELAY(単位:秒)を指定する。

・Delayed Replication時に、反映までの残り時間はSHOW SLAVE STATUSのSQL_Remaining_Delayで確認できる。

・mysqlfailoverのオプションに-vvをつけると、IOスレッドやSQLスレッド、レプリケーション遅延情報なども確認出来る。
例)
※出力結果はこのエントリーの下の方に貼りました。

1
$ mysqlfailover --master=root@debian00:3306 --slave=root@debian01:3306,root@debian02:3306 -vv

■疑問に思った事
・START SLAVE時のエラーをmy.cnfにreplicate-ignore-db=information_schema,performance_schema,mysqlを書いて回避したが、正しいのか?(mysql_install_dbとmysql_secure_installationのbinlogはSTART SLAVE時に適用しなくて良いと思うんだけど)

・mysqlfailoverのデーモン化は出来るのか?

・mysqlfailover自身の監視はどうやってするのか?

最後に僕のスライドと、my.cnf、mysqlfailoverのログなどを貼っておきます。

・マスタのmy.cnf

・スレーブその1のmy.cnf

・スレーブその2のmy.cnf

・mysqlfailoverでレプリケーションの状態が確認できる。
Delayed Replicationしているdebian01のhealth列に注目

・mysqlfailoverでフェールオーバーを試みて失敗した時のログ
debian01はDelayed Replicationしているのでdebian02が新しいマスタになるはずなのに、debian01がマスタになってしまっている。