1. Binlog logの紹介
BinlogとはBinary log、つまりバイナリログの略です。 Binlog の 3 つの主な機能には、ランダム IO を永続化するためのシーケンシャル IO に変換すること、マスター/スレーブ レプリケーションを実現すること、データ リカバリをサポートすることが含まれます。この記事では、マスター/スレーブ レプリケーションに関連する問題に焦点を当てます。
Binlog ログは、インデックス ファイルと多数のログ ファイルで構成されます。各ログ ファイルは、マジック ナンバーとイベントで構成されます。各ログ ファイルは、Rotate タイプのイベントで終わります。
各イベントは、イベント ヘッダーとイベント本体の 2 つの部分に分けることができます。
イベントheader 構造は次のとおりです。
イベント本体の構造には、固定サイズと可変サイズの 2 つの部分が含まれます。
Binlog ログの形式については、簡単に理解できるので、興味のある学生は深く学ぶことができます。
2. マスター/スレーブ レプリケーション
2.1 マスター/スレーブ レプリケーション プロセス
MySQL マスター/スレーブ レプリケーション プロセスは大まかに説明します。次のように:
2.2 GTID
GTID はグローバル トランザクション フラグを指し、マスターとスレーブの同期をマークするために使用されます。
マスター ノードがトランザクションを送信すると、GTID が生成され、Binlog ログに記録されます。スレーブ ライブラリの IO スレッドが Binlog ログを読み取ると、それが独自の Relaylog に保存され、この値が次に読み取られる GTID である gtid_next に設定されます。この gtid_next をライブラリから読み取るときに、この gtid_next が存在するかどうかを比較します。 Binlog ログ内の GTID は次のとおりです:
- このレコードがある場合は、この GTID を持つトランザクションが実行されており、無視できる (冪等) ことを意味します。
- そのようなレコードがない場合、スレーブは GTID トランザクションを実行し、それを独自の Binlog ログに記録します。
2.3 レプリケーション モデル
非同期レプリケーション: マスターは Binlog ログをスレーブにプッシュしますが、マスターはプッシュしません。スレーブがリレー ログにデータを正常に更新した後、メイン データベースはトランザクションを直接送信できるようになるまで待つ必要があります。このモードではデータの一貫性が犠牲になります。
同期レプリケーション: ユーザーが操作するたびに、ユーザーに返す前にマスターとスレーブの両方が正常に実行されたことを確認する必要があります。
半同期レプリケーション: では、スレーブが正常に実行される必要はありませんが、マスター ログを正常に受信した後に戻るようにマスターに通知できます。
2.4 MGR モード
分散型コンセンサス アルゴリズム Paxos。データベース クラスタは少なくとも 3 つ以上のノードで構成されます。トランザクションの送信は、送信される前にノードの半分以上によって承認される必要があります。マルチ書き込みモードがサポートされています。
MGR は、分散 paxos プロトコルに基づいて実装されたシェアナッシング レプリケーション ソリューションです。各インスタンスにはデータの独立した完全なコピーがあります。クラスターは自動的にノード情報を確認し、データを同期します。シングルマスター モードとマルチマスター モードの両方が提供されます。シングルマスター モードでは、メイン データベースのダウン後にマスターが自動的に選択されます。すべての書き込みはマスター ノードで実行されます。マルチマスター モードでは、マルチノードの書き込みがサポートされます。クラスターはフォールト トレランスを提供し、ほとんどのノードが正常に実行されている限り、クラスターは通常どおりサービスを提供できます。
2.5 並列再生
トランザクション再生とは、ライブラリの SQL スレッドからリレーログを実行する処理であり、この処理を効率化し、実行可能なトランザクションを実行することが並列再生です。同時に並行して。
MySQL 自体のトランザクションは ACID 特性を持っているため、マスター データベースからスレーブ データベースへのトランザクションは同期されます。実行の論理的タイミングが重なっている限り、2 つのトランザクションは安全に並行して再生できます。
一定期間内の特定のデータブロック領域に関するトランザクションセットをHashMapに格納します。同一グループ内のトランザクション間や、論理クロックが重複するトランザクション間では競合が発生しないため、競合の有無を判断することができません。
以上がMySQL Binlog ログとマスター/スレーブ レプリケーションとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。