Your SlideShare is downloading. ×
0
5.6のレプリケーション周りを    試してみた    MySQL Casual Talks in Fukuoka vol.2                            2012/10/18
自己紹介名前: 松崎 学所属: 株式会社キャム http://www.cam-net.co.jp/      (自社オリジナルの統合基幹業務システムをSaaSで提供中)Twitter: matsumana最近のお仕事:Javaプログラマ(Rub...
MySQLと私使用歴5ヶ月程(前回のMySQL Casual参加後、業務でも使い始めました)まだまだアウェー感がありますが、よろしくお願いします!
今回は、5.6の中で個人的に一番気になったレプリケーションについて  調べてみました。
まずは、とても重要な機能となる  GTIDから。
@rkajiyamaさんのブログより  http://d.hatena.ne.jp/rkajiyama/20120726/p1  GTID5.6.5から実装された、バイナリログに書かれたトランザクション単位にユニークなIDを割り当てる機能。レプ...
binlogの中身を見てみると、SQL実行前にGTIDがSETされている事が確認できます。  実行したSQLは、”create database aaa”です。
スレーブ側で    CHANGE MASTERしてみます。GTIDを使ってレプリケーションするには、MASTER_LOG_FILE, MASTER_LOG_POSの代わりにMASTER_AUTO_POSITION = 1を指定します。(MySQ...
GTID使ってレプリケーション出来た!      (途中は省略)
試してわかった事 その1マスタから物理ファイルをスレーブにコピーした後、auto.cnfのserver-uuidを書き換えないとSTART SLAVEする時にエラーが出て、レプリケーション出来ない。The slave I/O thread st...
試してわかった事 その2gtid-mode=ONdisable-gtid-unsafe-statementsをmy.cnfに書いた状態では、mysql_install_dbとmysql_secure_installationの実行時にエラーが出...
試してわかった事 その3START SLAVEでエラーが出て、レプリケーション出来ない。mysql_install_dbとmysql_secure_installation を実行した時のbinlogも実行されているっぽい。Last_Error...
試してわかった事 その4master-info-repository=TABLEをmy.cnfに書かないとmysqlfailoverでエラーが出る。$ mysqlfailover --master=root@mysqlmaster:3306 -...
今からmysqlfailoverで自動フェールオーバーを  やってみます!
フェールオーバー テストの内容以下の構成でレプリケーション構築済。マスタ → debian00スレーブ → debian01, debian02debian01はDelayed Replicationしておく(反映までの残り時間はSHOW SL...
こうなるはずdebian02の方が進んでるので、マスタになる。debian01がdebian02をマスタとして参照する。しばらく待つとスレーブ(debian01)がマスタ(debian02)に追いつく。
すみません、ちゃんと動かすことが出来ませんでした><GAがリリースされたらもう一回試してみます。
mysqlfailoverのログFailover starting in auto mode...# Checking eligibility of slave debian01:3306 for candidate.# GTID_MODE=O...
mysqlfailoverの疑問点
mysqlfailover使うと  自動フェールオーバーが    楽なのは良いけど、どういう感じに運用するのかな?mysqlfailoverって対話型ツールだけど、デーモン化できるの?mysqlfailover自身の監視方法は?
ご清聴ありがとうございました。
Upcoming SlideShare
Loading in...5
×

MySQL Casual Talks in Fukuoka vol.2

10,571

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,571
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
15
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "MySQL Casual Talks in Fukuoka vol.2"

  1. 1. 5.6のレプリケーション周りを 試してみた MySQL Casual Talks in Fukuoka vol.2 2012/10/18
  2. 2. 自己紹介名前: 松崎 学所属: 株式会社キャム http://www.cam-net.co.jp/ (自社オリジナルの統合基幹業務システムをSaaSで提供中)Twitter: matsumana最近のお仕事:Javaプログラマ(Rubyもほんの少し)、 インフラ最近の興味: Ruby, Python, Groovy, Scala Fluentd, Hadoop, Asakusa Framework
  3. 3. MySQLと私使用歴5ヶ月程(前回のMySQL Casual参加後、業務でも使い始めました)まだまだアウェー感がありますが、よろしくお願いします!
  4. 4. 今回は、5.6の中で個人的に一番気になったレプリケーションについて 調べてみました。
  5. 5. まずは、とても重要な機能となる GTIDから。
  6. 6. @rkajiyamaさんのブログより http://d.hatena.ne.jp/rkajiyama/20120726/p1 GTID5.6.5から実装された、バイナリログに書かれたトランザクション単位にユニークなIDを割り当てる機能。レプリケーション環境での状況の確認やスレーブ間での進 の比較が簡単になります。
  7. 7. binlogの中身を見てみると、SQL実行前にGTIDがSETされている事が確認できます。 実行したSQLは、”create database aaa”です。
  8. 8. スレーブ側で CHANGE MASTERしてみます。GTIDを使ってレプリケーションするには、MASTER_LOG_FILE, MASTER_LOG_POSの代わりにMASTER_AUTO_POSITION = 1を指定します。(MySQL Utilitiesに含まれるmysqlreplicateでも出来るみたいです)
  9. 9. GTID使ってレプリケーション出来た! (途中は省略)
  10. 10. 試してわかった事 その1マスタから物理ファイルをスレーブにコピーした後、auto.cnfのserver-uuidを書き換えないとSTART SLAVEする時にエラーが出て、レプリケーション出来ない。The slave I/O thread stops because master and slave have equal MySQL serverUUIDs; these UUIDs must be different for replication to work.スレーブ側で以下のコマンドを実行$ echo "[auto]nserver-uuid=`uuidgen`" > /var/lib/mysql/auto.cnf※auto.cnfのパスは自分の環境に合わせて読み替えてください。
  11. 11. 試してわかった事 その2gtid-mode=ONdisable-gtid-unsafe-statementsをmy.cnfに書いた状態では、mysql_install_dbとmysql_secure_installationの実行時にエラーが出る。ERROR: 1785 Updates to non-transactional tables are forbidden whenDISABLE_GTID_UNSAFE_STATEMENTS = 1.mysql_install_dbとmysql_secure_installationを実行する時だけ、上記2つのオプションはコメントアウトする。
  12. 12. 試してわかった事 その3START SLAVEでエラーが出て、レプリケーション出来ない。mysql_install_dbとmysql_secure_installation を実行した時のbinlogも実行されているっぽい。Last_Error: Error Updates to non-transactional tables are forbidden whenDISABLE_GTID_UNSAFE_STATEMENTS = 1. on query. Default database: .Query: UPDATE mysql.user SET Password=PASSWORD(hoge) WHEREUser=root and plugin = mysql_old_passwordとりあえず、my.cnfに以下を指定(いいのかな・・・?)replicate-ignore-db=information_schema,performance_schema,mysql
  13. 13. 試してわかった事 その4master-info-repository=TABLEをmy.cnfに書かないとmysqlfailoverでエラーが出る。$ mysqlfailover --master=root@mysqlmaster:3306 --slave=root@mysqlslave:3306CRITICAL Failover requires --master-info-repository=TABLE for all slaves.
  14. 14. 今からmysqlfailoverで自動フェールオーバーを やってみます!
  15. 15. フェールオーバー テストの内容以下の構成でレプリケーション構築済。マスタ → debian00スレーブ → debian01, debian02debian01はDelayed Replicationしておく(反映までの残り時間はSHOW SLAVE STATUSGしてSQL_Remaining_Delayで確認できる)CHANGE MASTER TO MASTER_HOST=debian00,MASTER_USER=repl, MASTER_PASSWORD=repl,MASTER_AUTO_POSITION=1, MASTER_DELAY=30;
  16. 16. こうなるはずdebian02の方が進んでるので、マスタになる。debian01がdebian02をマスタとして参照する。しばらく待つとスレーブ(debian01)がマスタ(debian02)に追いつく。
  17. 17. すみません、ちゃんと動かすことが出来ませんでした><GAがリリースされたらもう一回試してみます。
  18. 18. mysqlfailoverのログFailover starting in auto mode...# Checking eligibility of slave debian01:3306 for candidate.# GTID_MODE=ON ... Ok# Replication user exists ... Ok# Candidate slave debian01:3306 will become the new master.# Preparing candidate for failover.# LOCK STRING: FLUSH TABLES WITH READ LOCK# Connecting candidate to debian02:3306 as a master to retrieve unprocessed GTIDs.# Change master command for debian01:3306# CHANGE MASTER TO MASTER_HOST = debian02, MASTER_USER = repl, MASTER_PASSWORD = 3306,MASTER_PORT = 3306, MASTER_AUTO_POSITION=1# UNLOCK STRING: UNLOCK TABLES# Waiting for candidate to catch up to slave debian02:3306.# Slave debian01:3306:# QUERY = SELECT SQL_THREAD_WAIT_AFTER_GTIDS(1EABB17C-52B6-483C-82F7-7292D4AB0373:1-91, 3)# Return Code = 0# Slave debian01:3306:# QUERY = SELECT SQL_THREAD_WAIT_AFTER_GTIDS(E16A96E0-1787-11E2-96F7-000C299AE524:1-6, 3)# Return Code = -1# Creating replication user if it does not exist.# Stopping slaves.# Performing STOP on all slaves.# Executing stop on slave debian01:3306 Ok# Executing stop on slave debian02:3306 Ok# Switching slaves to new master.# Change master command for debian01:3306# CHANGE MASTER TO MASTER_HOST = debian01, MASTER_USER = repl, MASTER_PASSWORD = 3306,MASTER_PORT = 3306, MASTER_AUTO_POSITION=1# Change master command for debian02:3306# CHANGE MASTER TO MASTER_HOST = debian01, MASTER_USER = repl, MASTER_PASSWORD = 3306,MASTER_PORT = 3306, MASTER_AUTO_POSITION=1# Starting slaves.# Performing START on all slaves.# Executing start on slave debian02:3306 Ok# Checking slaves for errors.# debian02:3306 status: Ok# Failover complete.
  19. 19. mysqlfailoverの疑問点
  20. 20. mysqlfailover使うと 自動フェールオーバーが 楽なのは良いけど、どういう感じに運用するのかな?mysqlfailoverって対話型ツールだけど、デーモン化できるの?mysqlfailover自身の監視方法は?
  21. 21. ご清聴ありがとうございました。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×