2012年10月19日金曜日

mysqlfailoverを試したい(準備。GTIDでレプリケーション組むところまで)

MySQL 5.6で使えるGTIDの機能を使うと、MHAみたいなことがMySQL Workbench付属の
mysqlfailoverっていうユーティリティで出来るようになるよ!

ということで、試してみるメモ。


まずはVirtualBoxに5.6.7を3台浮かせる。。
_| ̄|○ < 3台は重いなー。。

my.cnfに↓を設定。


log-bin=bin
log-slave-update
gtid-mode = ON
disable-gtid-unsafe-statements

肝心なのはgtid-mode=ONだけだけど、
他のオプションも書いておかないと、
`gtid-mode=ONの時はこれつけないとダメだよ!'って怒られてmysqldが起動しなくなる(´・ω・)


GTIDを有効にしたら、レプリケーションを構成しておく。

mysql> CHANGE MASTER TO MASTER_HOST='cent21',MASTER_USER='repl',MASTER_AUTO_POSITION=1;

MASTER_AUTO_POSITION=1でGTIDを使ったレプリケーションを構築する、らしい。
GTIDを使うので、バイナリログファイル名もポジションも要らなくなる。

スレーブ側で保持している「最後に適用したGTID」の次のGTIDを探して、
それを含むバイナリログとポジションを自動設定してくれる、という様な動きっぽい。


ハマったのは、
121019 10:52:47 [ERROR] Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
と言われたこと。

サーバIDちゃんと別のにしてるのに! と思ったら、
server_uuidという値をdatadir/auto.cnfに書き込んでいた。
(datadir以下をまるっとマスターからコピーしていたので、これもコピーされたんだ)

これを一度削除して再起動すると、auto.cnfが再作成されてちゃんとユニークになった。


取り敢えずここまで。。


【2012/10/23 12:15】
色々ごにょごにょしていて(やっと)気付いたんだけれど、
disable-gtid-unsafe-statementsを有効にするとトランザクション非対応なテーブルに対する更新を
一切合切拒否る様になる。
つまり、InnoDBだけ更新できて、MyISAMやMemoryはダメ。

http://dev.mysql.com/doc/refman/5.6/en/replication-options-gtids.html

disられてるなぁMyISAM。。(つд`)

0 件のコメント :

コメントを投稿