SlideShare une entreprise Scribd logo
1  sur  63
Télécharger pour lire hors ligne
Art Of MySQL Replicaton
                      〜 10 年の歴史を誇るレプリケーションの妙技〜




 奥野 幹也
 @nippondanji
 mikiya (dot) okuno (at) gmail (dot) com
免責事項
●
    本プレゼンテーションにおいて示されている見解は、
    私自身の見解であって、オラクル・コーポレーション
    の見解を必ずしも反映したものではありません。ご了
    承ください。
自己紹介
●
    今日は個人として来ています。
    –   http://nippondanji.blogspot.com/
    –   Twitter: @nippondanji
●
    現職は MySQL サポートエンジニア。
    –   2000 年にサン・マイクロシステムズ入社
    –   2007 年に MySQL KK へ転職
    –   気付くとまたサン・マイクロシステムズに・・・
    –   現在は日本オラクルに在席。
●
    日々のしごと
    –   MySQL トラブルシューティング全般
    –   Q&A 回答
        など
レプリケーションの
  仕組み!!
レプリケーションの仕組み
レプリケーションの仕組み
●
    マスターとスレーブが同じデータを持っている。
    –   同じデータに対して同じ SQL 文を実行すれば、同じ
         結果になるんじゃね?
          ●
              不定なヤツはどうするの?( RAND() とか。)
●
    マスターの更新はバイナリログに記録する。
    –   バイナリログってなにもの?!
●
    スレーブの 2 つのスレッド
    –   I/O スレッド : マスターからバイナリログのデータを
          受け取ってリレーログへ記録
    –   SQL スレッド : リレーログの中身を実行
設定方法概要
●
    マスターでバイナリログを有効化
●
    マスター上にレプリケーション用のユーザーを作成す
    る。
●
    マスターのデータをスレーブにコピー
     –   mysqldump --master-data=2 ...
●
    マスターとスレーブで server_id を設定
●
    スレーブの設定
     –   CHANGE MASTER TO ...
     –   START SLAVE;
レプリケーション進化の軌跡
●
    バージョン 3.23
     –   シングルスレッド
     –   ステートメントベース
●
    バージョン 4.0
     –   バイナリログの受信と適用が別スレッドに
            ●
                遅延の解消!
●
    バージョン 5.1
     –   行ベースレプリケーション
     –   MySQL Cluster レプリケーション
●
    バージョン 5.5
     –   Semi-Synchronous!!
Semi-Synchronous
 レプリケーション
免責事項 - その 2
●
    現時点( 2010 年 7 月)の段階では、 MySQL 5.5 は
    マイルストーンリリース( β 版)です。機能や実装
    については、予告無く変更される場合がありますので
    ご注意ください。
トポロジのお話。
利用可能なトポロジ
   Master/Slave                           Dual Master

Master           Slave              Master           Master




                           Cascading

          Master            Slave          Slave



                                                Circular
           1:N
                                       Master
                   Slave
  Master
                                                           Master



             Slave


  Slave                                  Master
さらにその組み合わせ

  Slave

                                           Slave



Slave           Master

                                                   Slave
                               Master


  Slave

                                               Slave
                  Master
                                   Slave



                           Slave
        Slave
                 Slave
                                           Slave
バイナリログ!
バイナリログのレイアウト

                タイムスタンプ               4 バイト
                タイプコード                1 バイト
 ヘッダ            サーバ ID                4 バイト
                イベント長                 4 バイト
                次イベント開始位置             4 バイト
イベント            フラグ                   2 バイト
 データ            追加ヘッダ                 可変長( 0 〜 x )




http://forge.mysql.com/wiki/MySQL_Internals_Binary_Log
バイナリログフォーマットの種類

フォーマット   説明                サイズ   Non-      Trigger
                                 determi
                                 nistic
SBR      ステートメント( SQL 文)   小
         がそのままバイナリログ
         に記録される。                   ×         ○
         更新されたデータそのも       大
                                   ○         ×
RBR
         のが記録される。

                           小
                                   ○
MBR      SBR と RBR を状況に
         応じて切り換える。                           △
Non-deterministic って?
●
    非決定性な SQL 文=実行するたびに結果が変わる可能性
    がある。
    –   UUID() 、 UUID_SHORT()
    –   USER()
    –   FOUND_ROWS()
    –   LOAD_FILE()
    –   SYSDATE()
    –   GET_LOCK() 、 RELEASE_LOCK()
    –   IS_FREE_LOCK() 、 IS_USED_LOCK()
    –   MASTER_POS_WAIT()
    –   SLEEP()
    –   VERSION()
    –   ソートなしの LIMIT 句
    –   UDF 、非決定性のストアドプロシージャ / ファンクション
    –   INFORMATION_SCHEMA の参照
    –   READ-COMMITTED/READ-UNCOMMITTED
SBR でも OK!!
●
    NOW()
     –   バイナリログに記録されたタイムスタンプを利用する
          ことで、スレーブでも同じ時刻に!
     –   SYSDATE() は実時間なので非決定性
●
    RAND()
     –   シードをバイナリログに記録。スレーブ側ではシード
          を元に同じ乱数を生成
●
    LOAD DATA INFILE
     –   ファイルをスレーブへ転送
●
    REPEATABLE-READ
     –   本来、順番に実行すると同じ結果になるという保証が
          あるのは SERIALIZABLE だけでは?
     –   Next-key Locking!! ファントムよ、さようなら。
InnoDB の分離レベル

分離レベル          分離性   性能   ダーティ   反復不可能読   ファントム
                          リード    み取り

READ-           低     低   O      O        O
UNCOMMITTED

READ-                 高   X      O        O
COMMITTED

REPEATABLE-           高   X      X        X
READ


SERIALIZABLE    高     低   X      X        X
バイナリログの管理
●
    有効化 --log-bin=binlog
●
    一覧表示 SHOW BINARY LOGS;
●
    中見
     –   SHOW BINLOG EVENTS IN 'binlog.000001'
     –   mysqlbinlog binlog.000001
●
    削除 PURGE BINARY LOGS TO 'binlog.000002'
●
    自動削除 --expire-logs-days=30
負荷の分離!
マスターから負荷のかかる操作を分離
       アプリケーション




                        マスター
           マスター   HA
                       スタンバイ




                               バックアップ

           スレーブ         スレーブ


 レポーティング
ワンポイントアドバイス
●
    レポート作成中は SQL スレッドを停止しておく。
     –   STOP SLAVE SQL_THREAD
     –   レポート作成がスムーズに!
     –   バイナリログだけは受け取っておく!
●
    --dump-slave オプション
     –   MySQL 5.5 の mysqldump コマンドに実装。
     –   マスター上で --master-data オプションを使ったとき
          と同じ効果。
特定のデータを捨てる。

マスター           スレーブ




  TABLE 1   TABLE 1

 INNODB     INNODB




 TABLE 2    TABLE 2
             Black
 INNODB      hole
スレーブ de トリガ

マスター           スレーブ




         SBR   Black
INNODB         hole



トリガなし。



               トリガ実行
スケールアウト!
スケールアウト戦略
           更新処理




アプリケーション



                            マスター




            スレーブ   スレーブ   スレーブ   スレーブ   スレーブ   スレーブ

  参照処理
気合いの多段構成

                          マスター




         スレーブ   スレーブ   スレーブ スレーブ   スレーブ   スレーブ




スレーブ   スレーブ   スレーブ スレーブ   スレーブ   スレーブ
Sharding

                                更新処理




         マスター                    マスター                    マスター




スレーブ   スレーブ スレーブ スレーブ   スレーブ   スレーブ スレーブ スレーブ   スレーブ   スレーブ スレーブ スレーブ
High-
Availability
スレーブを待機系に使う。
●
    利点
    –   HA と違ってリカバリ不要!
          ●
              超高速フェイルオーバー
    –   レプリケーションはデフォルトで使える機能
●
    課題
    –   非同期だから最後に更新したデータを一部失う覚悟が
          必要。
    –   1:N 構成では昇格に工夫が必要。
    –   自動化。

                   マスター     更新    スレーブ

                            非同期
Semi-Synchronous
 レプリケーション
InnoDB のログを同期しないという選択
●
    innodb_fush_log_at_trx_commit=0
●
    スレーブに更新が転送されてるから
             失うものは何も無い!
●
    マスタークラッシュ時にはマスターのデータは破棄
     –   スレーブからデータを再度転送・同期
ベンチマーク結果
600                                         sysbench
                                        MySQL 5.5.5-m3
                                        Athlon 64 2 Core
500
                                         7200rpm SATA
                                          Gigabit Ether
400                                        単位 : TPS


300                                     ディスク同期あり
                                        ディスク同期なし
200



100



  0
      Normal    Semi-Sync   Read-Only
スレーブの昇格!
●
    何が問題か?
    –   1:N 構成
           ●
               スレーブ間に差異が生じてしまう。
           ●
               レプリケーションが成立するためには、開始時には
                 同じデータでなければならない。
           ●
               --log-slave-updates をしても、スレーブのバイナリ
                 ログの位置はマスターの位置とズレがある。
                  –   イベントのサイズが違う!!
           ●
               スレーブを自動的に同期する方法はない。
スレーブ間の差異:一般的な解決法
●
    スレーブ間の差異を無視する。(運がよければ大丈夫・・・)
●
    マスターの OS が再起動するのを待って、マスター上のバイナ
    リログから差異を抽出する。
     – クラッシュ時にバイナリログが欠損すると使えない。
     – --sync-binlog=1 は遅い。
●
    スレーブ上のバイナリログを活用する: --log-slave-updates
     –   頑張ってスクリプト書く書くしかじか?!
     –   Auto-inc カラムを使って目印に。
●
    Global Transaction ID
     –   自動化が出来る素晴らしい!けど・・・
     –   Google Patch の適用が必要。
     –   MySQL 5.0 しか対応してないよね・・・
スレーブ間の差異をなくす新手順
●
    Xid を使おう!
     –   XA トランザクションの ID という意味だが、 XA でな
          いトランザクションを利用していると、 COMMIT
          時にバイナリログに記録される。
     –   マスターの query_id (単調増加の 64 ビット整数)
           ●
               マスターが再起動しない限り ID が被らない!
     –   リレーログにもそっくり同じ Xid が記録される。
           ●
               リレーログの差異を特定できる!!
Xid イベント
BEGIN
/*!*/;
# at 174
#100723 0:21:27 server id 1 end_log_pos 269
Query thread_id=8 exec_time=0 error_code=0
use test/*!*/;
SET TIMESTAMP=1279812087/*!*/;
insert into t2 values(1),(2),(3)
/*!*/;
# at 269
#100723 0:21:27 server id 1 end_log_pos 296
Xid = 73
COMMIT/*!*/;
DELIMITER ;
手順その1
●
    前提
    –   1:N 構成
    –   XA トランザクションは使用しない。
    –   InnoDB を利用する。
●
    リレーログの設定
    –   リレーログを一定期間保存: relay_log_purge=0
    –   合計サイズの上限: relay_log_space_limit=1G
    –   各ファイルサイズ: max_relay_log_size=64M
    –   ファイル名を分かり易く: relay_log=relay-bin
    –   スレーブのバイナリログは空にしておく:
         log_slave_updates=0
手順その2
●
    マスターがクラッシュ!
    –   スレーブのデータは同期していない(差分がある)も
         のとします。
●
    各スレーブのリレーログに含まれる Xid を調べて、
    「最も進んでいるスレーブ」を特定する。
    –   DDL など、 Xid が含まれないイベントが最後尾にある
         場合には、イベントの数をカウントする。
    –   SHOW SLAVE STATUS を使っても OK
●
    「最も進んでいるスレーブ」を新たなマスターとし
    て、更新を開始する。
    –   新マスターのバイナリログは、昇格前は空。
手順その3
●
    全てのスレーブにおいて、リレーログの適用が終わるのを
    待つ。
●
    mysqlbinlog コマンドで、「最も進んでいるスレーブ」の
    リレーログから各スレーブごとの差分を抜き出す。
●
    差分を各スレーブに適用する。
     –   適用が完了した時点ではどのスレーブも同じデータ。
●
    CHANGE MASTER TO でレプリケーションを開始!
     –   新マスターは、昇格する前のバイナリログは空なので、バ
          イナリログに含まれるのは「昇格後になされた更新すべ
          て」
     –   スレーブはバイナリログを最初から全て適用すればよい
     –   CHANGE MASTER TO でファイル名とポジションの指定
          が不要!!
スレーブ昇格手順の課題
●
    mysqlbinlog コマンドは Xid を使って開始位置を指定
    することが出来ない。
●
    Xid は単調増加ではない。
     –   query_id は単調増加。
     –   query_id はクエリ開始時につけられる。
     –   クエリ終了時点では順序が入れ替わってるかも。
●
    現時点ではまだ PoC
     –   さっさとスクリプト書こうず。
●
    監視
ディザスタ
リカバリ!
拠点間でレプリケーション!
●
    データ圧縮!!
    –   slave_compressed_protocol=0
    –   貴重な帯域を節約しましょう。
●
    暗号化して送信
    –   CHANGE MASTER TO で SSL オプションを指定。
    –   クラウドでも安心!
    –   SSL の設定方法については鍵の本 P.441 を。
●
    非同期で。
    –   レイテンシーが大きいので Semi-Sync は使っちゃダ
         メ。
拠点間でレプリケーションの図




       インターネット

       更新 (圧縮+暗号化)         スレーブ
マスター

                     非同期
MySQL
Cluster!!
MySQL Cluster 概要
        アプリケーション




 SQL      SQL      SQL
 ノード      ノード      ノード


                           管理
         NDB API
                          ノード

データ                データ     管理
ノード                ノード    ノード




  データ               データ
  ノード               ノード
MySQL Cluster Replication
        SQL ノード
 更
 新


         Binlog write             更新
 NDB
                         binlog          スレーブ
ストレージ   Injector
エンジン




データ                     データ       ●
                                       通常のレプリケーショ
ノード                     ノード            ンと同じプロトコル
                                  ●
                                       RBR のみ
                                  ●
                                       競合検出機能 !!
  データ                    データ
  ノード                    ノード
苦手な JOIN を克服する!!
                アプリケーション         JOIN
       更新



       マスター
                            スレーブ
SQL    SQL    SQL          INNODB
ノード    ノード    ノード


データ           データ           スレーブ
ノード           ノード
                           INNODB



 データ           データ
 ノード           ノード          スレーブ
                           INNODB


                             :
                             :
PBXT!!
Engine Level Replication?
        更
        新


     マスター                         スレーブ            ●
                                                      MVCC Snapshot Transfer
                                                  ●
                                                      Asynchronous Replication
                                                  ●
                                                      Synchronous Replication
                                                        – Real-time feedback
                                                        – No log fush
        binlog                    relay-log             – Bi-directional




         PBXT                    PBXT




http://pbxt.blogspot.com/2010/03/pbxt-engine-level-replication-works.html
課題!
できないこと。
●
    並列化
●
    マルチソースレプリケーション
●
    行単位でフィルタリング
SPIDER ストレージエンジン

APP1     APP2     APP3     APP4

 n1       n2       n3       n4
SPIDER   SPIDER   SPIDER   SPIDER




 n5       n6       n7       n8

INNODB   INNODB   INNODB   INNODB
パラレルレプリケーション!
APP1     APP2              APP3     APP4
 n1       n2                n3       n4
SPIDER   SPIDER            SPIDER   SPIDER




 n5       n6                n7       n8
INNODB   INNODB            INNODB   INNODB



slave    slave             slave    slave
INNODB   INNODB            INNODB   INNODB



                  SPIDER
                  slave
マルチソースレプリケーション
        Multi Master


   Master           Master




        Multi Source


   Master           Master




            Slave
偽マルチソースレプリケーション
 更
 新

マスター    スレーブ 1   スレーブ 2



 DB 1    DB 1     DB 1




         DB2      DB2




          更
          新
SPIDER によるマルチソース


 Master            Master




 Slave             Slave
 SPIDER            SPIDER




           Slave

          INNODB
行単位のフィルタリング

マスター                   スレーブ




         SBR   Black
INNODB         hole



トリガなし。
                       更新
                              INNODB

               トリガ実行
まとめ!
様々な利用シーン

 Master           Slave       Master


     高可用性
                                               バックアップ

                                             Slave
                              Slave

                          レポーティング


                                               Slave
                                    Master



           Internet                          Slave
Master    圧縮+暗号化      Slave

                                    Slave
   ディザスタリカバリ                                 スケールアウト
まとめ


  MySQL 人気の秘訣
 レプリケーションは
 やっぱり凄かった!
デフォルトで使えるのに!
    簡単なのに!
Q!!
           &
ご静聴ありがとうございました。
                  A!!

Contenu connexe

Tendances

こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
SQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイルSQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイルItabashi Masayuki
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredisnasa9084
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)NTT DATA Technology & Innovation
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...Insight Technology, Inc.
 
DynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptxDynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptxTetsuya Wada
 
アジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイドアジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイドHiroyuki Ito
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技yoku0825
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドYasufumi Kinoshita
 

Tendances (20)

こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
SQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイルSQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイル
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
 
DynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptxDynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptx
 
アジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイドアジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイド
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライド
 

Similaire à Art of MySQL Replication.

MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門Mikiya Okuno
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)Yoshinori Nakanishi
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMikiya Okuno
 
続マスタN対スレーブ1レプリケーションの作り方
続マスタN対スレーブ1レプリケーションの作り方続マスタN対スレーブ1レプリケーションの作り方
続マスタN対スレーブ1レプリケーションの作り方do_aki
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例Naoto MATSUMOTO
 
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaPostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaTakahiro Itagaki
 
Using Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba PiggUsing Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba PiggYuuki Namikawa
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualYasuhiro Matsuo
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationMikiya Okuno
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてYuuki Namikawa
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情Meiji Kimura
 
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/SpringPacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/SpringTakatoshi Matsuo
 
Aurora MySQL HandMade Major VersionUp
Aurora MySQL HandMade Major VersionUpAurora MySQL HandMade Major VersionUp
Aurora MySQL HandMade Major VersionUpTakafumi Nakahara
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo!デベロッパーネットワーク
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話Takahiro Okumura
 

Similaire à Art of MySQL Replication. (20)

MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
続マスタN対スレーブ1レプリケーションの作り方
続マスタN対スレーブ1レプリケーションの作り方続マスタN対スレーブ1レプリケーションの作り方
続マスタN対スレーブ1レプリケーションの作り方
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例
 
MHA, Murakumo & Me
MHA, Murakumo & MeMHA, Murakumo & Me
MHA, Murakumo & Me
 
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaPostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
 
Using Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba PiggUsing Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba Pigg
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
 
MySQL at Yahoo! JAPAN #dbts2018
MySQL at Yahoo! JAPAN #dbts2018MySQL at Yahoo! JAPAN #dbts2018
MySQL at Yahoo! JAPAN #dbts2018
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
 
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/SpringPacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
 
Aurora MySQL HandMade Major VersionUp
Aurora MySQL HandMade Major VersionUpAurora MySQL HandMade Major VersionUp
Aurora MySQL HandMade Major VersionUp
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
 

Plus de Mikiya Okuno

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMikiya Okuno
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編Mikiya Okuno
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったかMikiya Okuno
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方Mikiya Okuno
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version Mikiya Okuno
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityMikiya Okuno
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴Mikiya Okuno
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座Mikiya Okuno
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBMikiya Okuno
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかMikiya Okuno
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜Mikiya Okuno
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06Mikiya Okuno
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきかMikiya Okuno
 
RDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるRDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるMikiya Okuno
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルMikiya Okuno
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09Mikiya Okuno
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okunoMikiya Okuno
 
Database qpstudy-okuno
Database qpstudy-okunoDatabase qpstudy-okuno
Database qpstudy-okunoMikiya Okuno
 

Plus de Mikiya Okuno (20)

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
 
RDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるRDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考える
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okuno
 
Database qpstudy-okuno
Database qpstudy-okunoDatabase qpstudy-okuno
Database qpstudy-okuno
 

Dernier

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Dernier (9)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Art of MySQL Replication.

  • 1. Art Of MySQL Replicaton 〜 10 年の歴史を誇るレプリケーションの妙技〜 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com
  • 2. 免責事項 ● 本プレゼンテーションにおいて示されている見解は、 私自身の見解であって、オラクル・コーポレーション の見解を必ずしも反映したものではありません。ご了 承ください。
  • 3. 自己紹介 ● 今日は個人として来ています。 – http://nippondanji.blogspot.com/ – Twitter: @nippondanji ● 現職は MySQL サポートエンジニア。 – 2000 年にサン・マイクロシステムズ入社 – 2007 年に MySQL KK へ転職 – 気付くとまたサン・マイクロシステムズに・・・ – 現在は日本オラクルに在席。 ● 日々のしごと – MySQL トラブルシューティング全般 – Q&A 回答 など
  • 6. レプリケーションの仕組み ● マスターとスレーブが同じデータを持っている。 – 同じデータに対して同じ SQL 文を実行すれば、同じ 結果になるんじゃね? ● 不定なヤツはどうするの?( RAND() とか。) ● マスターの更新はバイナリログに記録する。 – バイナリログってなにもの?! ● スレーブの 2 つのスレッド – I/O スレッド : マスターからバイナリログのデータを 受け取ってリレーログへ記録 – SQL スレッド : リレーログの中身を実行
  • 7. 設定方法概要 ● マスターでバイナリログを有効化 ● マスター上にレプリケーション用のユーザーを作成す る。 ● マスターのデータをスレーブにコピー – mysqldump --master-data=2 ... ● マスターとスレーブで server_id を設定 ● スレーブの設定 – CHANGE MASTER TO ... – START SLAVE;
  • 8. レプリケーション進化の軌跡 ● バージョン 3.23 – シングルスレッド – ステートメントベース ● バージョン 4.0 – バイナリログの受信と適用が別スレッドに ● 遅延の解消! ● バージョン 5.1 – 行ベースレプリケーション – MySQL Cluster レプリケーション ● バージョン 5.5 – Semi-Synchronous!!
  • 10. 免責事項 - その 2 ● 現時点( 2010 年 7 月)の段階では、 MySQL 5.5 は マイルストーンリリース( β 版)です。機能や実装 については、予告無く変更される場合がありますので ご注意ください。
  • 12. 利用可能なトポロジ Master/Slave Dual Master Master Slave Master Master Cascading Master Slave Slave Circular 1:N Master Slave Master Master Slave Slave Master
  • 13. さらにその組み合わせ Slave Slave Slave Master Slave Master Slave Slave Master Slave Slave Slave Slave Slave
  • 15. バイナリログのレイアウト タイムスタンプ 4 バイト タイプコード 1 バイト ヘッダ サーバ ID 4 バイト イベント長 4 バイト 次イベント開始位置 4 バイト イベント フラグ 2 バイト データ 追加ヘッダ 可変長( 0 〜 x ) http://forge.mysql.com/wiki/MySQL_Internals_Binary_Log
  • 16. バイナリログフォーマットの種類 フォーマット 説明 サイズ Non- Trigger determi nistic SBR ステートメント( SQL 文) 小 がそのままバイナリログ に記録される。 × ○ 更新されたデータそのも 大 ○ × RBR のが記録される。 小 ○ MBR SBR と RBR を状況に 応じて切り換える。 △
  • 17. Non-deterministic って? ● 非決定性な SQL 文=実行するたびに結果が変わる可能性 がある。 – UUID() 、 UUID_SHORT() – USER() – FOUND_ROWS() – LOAD_FILE() – SYSDATE() – GET_LOCK() 、 RELEASE_LOCK() – IS_FREE_LOCK() 、 IS_USED_LOCK() – MASTER_POS_WAIT() – SLEEP() – VERSION() – ソートなしの LIMIT 句 – UDF 、非決定性のストアドプロシージャ / ファンクション – INFORMATION_SCHEMA の参照 – READ-COMMITTED/READ-UNCOMMITTED
  • 18. SBR でも OK!! ● NOW() – バイナリログに記録されたタイムスタンプを利用する ことで、スレーブでも同じ時刻に! – SYSDATE() は実時間なので非決定性 ● RAND() – シードをバイナリログに記録。スレーブ側ではシード を元に同じ乱数を生成 ● LOAD DATA INFILE – ファイルをスレーブへ転送 ● REPEATABLE-READ – 本来、順番に実行すると同じ結果になるという保証が あるのは SERIALIZABLE だけでは? – Next-key Locking!! ファントムよ、さようなら。
  • 19. InnoDB の分離レベル 分離レベル 分離性 性能 ダーティ 反復不可能読 ファントム リード み取り READ- 低 低 O O O UNCOMMITTED READ- 高 X O O COMMITTED REPEATABLE- 高 X X X READ SERIALIZABLE 高 低 X X X
  • 20. バイナリログの管理 ● 有効化 --log-bin=binlog ● 一覧表示 SHOW BINARY LOGS; ● 中見 – SHOW BINLOG EVENTS IN 'binlog.000001' – mysqlbinlog binlog.000001 ● 削除 PURGE BINARY LOGS TO 'binlog.000002' ● 自動削除 --expire-logs-days=30
  • 22. マスターから負荷のかかる操作を分離 アプリケーション マスター マスター HA スタンバイ バックアップ スレーブ スレーブ レポーティング
  • 23. ワンポイントアドバイス ● レポート作成中は SQL スレッドを停止しておく。 – STOP SLAVE SQL_THREAD – レポート作成がスムーズに! – バイナリログだけは受け取っておく! ● --dump-slave オプション – MySQL 5.5 の mysqldump コマンドに実装。 – マスター上で --master-data オプションを使ったとき と同じ効果。
  • 24. 特定のデータを捨てる。 マスター スレーブ TABLE 1 TABLE 1 INNODB INNODB TABLE 2 TABLE 2 Black INNODB hole
  • 25. スレーブ de トリガ マスター スレーブ SBR Black INNODB hole トリガなし。 トリガ実行
  • 27. スケールアウト戦略 更新処理 アプリケーション マスター スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ 参照処理
  • 28. 気合いの多段構成 マスター スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ
  • 29. Sharding 更新処理 マスター マスター マスター スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ
  • 31. スレーブを待機系に使う。 ● 利点 – HA と違ってリカバリ不要! ● 超高速フェイルオーバー – レプリケーションはデフォルトで使える機能 ● 課題 – 非同期だから最後に更新したデータを一部失う覚悟が 必要。 – 1:N 構成では昇格に工夫が必要。 – 自動化。 マスター 更新 スレーブ 非同期
  • 33. InnoDB のログを同期しないという選択 ● innodb_fush_log_at_trx_commit=0 ● スレーブに更新が転送されてるから 失うものは何も無い! ● マスタークラッシュ時にはマスターのデータは破棄 – スレーブからデータを再度転送・同期
  • 34. ベンチマーク結果 600 sysbench MySQL 5.5.5-m3 Athlon 64 2 Core 500 7200rpm SATA Gigabit Ether 400 単位 : TPS 300 ディスク同期あり ディスク同期なし 200 100 0 Normal Semi-Sync Read-Only
  • 35. スレーブの昇格! ● 何が問題か? – 1:N 構成 ● スレーブ間に差異が生じてしまう。 ● レプリケーションが成立するためには、開始時には 同じデータでなければならない。 ● --log-slave-updates をしても、スレーブのバイナリ ログの位置はマスターの位置とズレがある。 – イベントのサイズが違う!! ● スレーブを自動的に同期する方法はない。
  • 36. スレーブ間の差異:一般的な解決法 ● スレーブ間の差異を無視する。(運がよければ大丈夫・・・) ● マスターの OS が再起動するのを待って、マスター上のバイナ リログから差異を抽出する。 – クラッシュ時にバイナリログが欠損すると使えない。 – --sync-binlog=1 は遅い。 ● スレーブ上のバイナリログを活用する: --log-slave-updates – 頑張ってスクリプト書く書くしかじか?! – Auto-inc カラムを使って目印に。 ● Global Transaction ID – 自動化が出来る素晴らしい!けど・・・ – Google Patch の適用が必要。 – MySQL 5.0 しか対応してないよね・・・
  • 37. スレーブ間の差異をなくす新手順 ● Xid を使おう! – XA トランザクションの ID という意味だが、 XA でな いトランザクションを利用していると、 COMMIT 時にバイナリログに記録される。 – マスターの query_id (単調増加の 64 ビット整数) ● マスターが再起動しない限り ID が被らない! – リレーログにもそっくり同じ Xid が記録される。 ● リレーログの差異を特定できる!!
  • 38. Xid イベント BEGIN /*!*/; # at 174 #100723 0:21:27 server id 1 end_log_pos 269 Query thread_id=8 exec_time=0 error_code=0 use test/*!*/; SET TIMESTAMP=1279812087/*!*/; insert into t2 values(1),(2),(3) /*!*/; # at 269 #100723 0:21:27 server id 1 end_log_pos 296 Xid = 73 COMMIT/*!*/; DELIMITER ;
  • 39. 手順その1 ● 前提 – 1:N 構成 – XA トランザクションは使用しない。 – InnoDB を利用する。 ● リレーログの設定 – リレーログを一定期間保存: relay_log_purge=0 – 合計サイズの上限: relay_log_space_limit=1G – 各ファイルサイズ: max_relay_log_size=64M – ファイル名を分かり易く: relay_log=relay-bin – スレーブのバイナリログは空にしておく: log_slave_updates=0
  • 40. 手順その2 ● マスターがクラッシュ! – スレーブのデータは同期していない(差分がある)も のとします。 ● 各スレーブのリレーログに含まれる Xid を調べて、 「最も進んでいるスレーブ」を特定する。 – DDL など、 Xid が含まれないイベントが最後尾にある 場合には、イベントの数をカウントする。 – SHOW SLAVE STATUS を使っても OK ● 「最も進んでいるスレーブ」を新たなマスターとし て、更新を開始する。 – 新マスターのバイナリログは、昇格前は空。
  • 41. 手順その3 ● 全てのスレーブにおいて、リレーログの適用が終わるのを 待つ。 ● mysqlbinlog コマンドで、「最も進んでいるスレーブ」の リレーログから各スレーブごとの差分を抜き出す。 ● 差分を各スレーブに適用する。 – 適用が完了した時点ではどのスレーブも同じデータ。 ● CHANGE MASTER TO でレプリケーションを開始! – 新マスターは、昇格する前のバイナリログは空なので、バ イナリログに含まれるのは「昇格後になされた更新すべ て」 – スレーブはバイナリログを最初から全て適用すればよい – CHANGE MASTER TO でファイル名とポジションの指定 が不要!!
  • 42. スレーブ昇格手順の課題 ● mysqlbinlog コマンドは Xid を使って開始位置を指定 することが出来ない。 ● Xid は単調増加ではない。 – query_id は単調増加。 – query_id はクエリ開始時につけられる。 – クエリ終了時点では順序が入れ替わってるかも。 ● 現時点ではまだ PoC – さっさとスクリプト書こうず。 ● 監視
  • 44. 拠点間でレプリケーション! ● データ圧縮!! – slave_compressed_protocol=0 – 貴重な帯域を節約しましょう。 ● 暗号化して送信 – CHANGE MASTER TO で SSL オプションを指定。 – クラウドでも安心! – SSL の設定方法については鍵の本 P.441 を。 ● 非同期で。 – レイテンシーが大きいので Semi-Sync は使っちゃダ メ。
  • 45. 拠点間でレプリケーションの図 インターネット 更新 (圧縮+暗号化) スレーブ マスター 非同期
  • 47. MySQL Cluster 概要 アプリケーション SQL SQL SQL ノード ノード ノード 管理 NDB API ノード データ データ 管理 ノード ノード ノード データ データ ノード ノード
  • 48. MySQL Cluster Replication SQL ノード 更 新 Binlog write 更新 NDB binlog スレーブ ストレージ Injector エンジン データ データ ● 通常のレプリケーショ ノード ノード ンと同じプロトコル ● RBR のみ ● 競合検出機能 !! データ データ ノード ノード
  • 49. 苦手な JOIN を克服する!! アプリケーション JOIN 更新 マスター スレーブ SQL SQL SQL INNODB ノード ノード ノード データ データ スレーブ ノード ノード INNODB データ データ ノード ノード スレーブ INNODB : :
  • 51. Engine Level Replication? 更 新 マスター スレーブ ● MVCC Snapshot Transfer ● Asynchronous Replication ● Synchronous Replication – Real-time feedback – No log fush binlog relay-log – Bi-directional PBXT PBXT http://pbxt.blogspot.com/2010/03/pbxt-engine-level-replication-works.html
  • 53. できないこと。 ● 並列化 ● マルチソースレプリケーション ● 行単位でフィルタリング
  • 54. SPIDER ストレージエンジン APP1 APP2 APP3 APP4 n1 n2 n3 n4 SPIDER SPIDER SPIDER SPIDER n5 n6 n7 n8 INNODB INNODB INNODB INNODB
  • 55. パラレルレプリケーション! APP1 APP2 APP3 APP4 n1 n2 n3 n4 SPIDER SPIDER SPIDER SPIDER n5 n6 n7 n8 INNODB INNODB INNODB INNODB slave slave slave slave INNODB INNODB INNODB INNODB SPIDER slave
  • 56. マルチソースレプリケーション Multi Master Master Master Multi Source Master Master Slave
  • 57. 偽マルチソースレプリケーション 更 新 マスター スレーブ 1 スレーブ 2 DB 1 DB 1 DB 1 DB2 DB2 更 新
  • 58. SPIDER によるマルチソース Master Master Slave Slave SPIDER SPIDER Slave INNODB
  • 59. 行単位のフィルタリング マスター スレーブ SBR Black INNODB hole トリガなし。 更新 INNODB トリガ実行
  • 61. 様々な利用シーン Master Slave Master 高可用性 バックアップ Slave Slave レポーティング Slave Master Internet Slave Master 圧縮+暗号化 Slave Slave ディザスタリカバリ スケールアウト
  • 62. まとめ MySQL 人気の秘訣 レプリケーションは やっぱり凄かった! デフォルトで使えるのに! 簡単なのに!
  • 63. Q!! & ご静聴ありがとうございました。 A!!