MySQL マスタースレーブ同期の原理と応用

MySQL マスタースレーブ同期の原理と応用

1. マスタースレーブ同期原理

マスタースレーブ同期アーキテクチャ図(非同期同期)

これは最も一般的なマスター スレーブ同期アーキテクチャです。

マスタースレーブ同期プロセス(非同期同期)

  • メインデータベースはデータの変更をbinlogファイルに書き込みます
  • ライブラリI/Oスレッドからdump要求を開始する
  • マスターI/Oスレッドはbinlogをスレーブにプッシュします
  • ライブラリI/Oスレッドからローカルrelay logファイルを書き込みます( binlogと同じ形式)
  • スレーブ SQL スレッドはrelay logを読み取り、それをシリアルに再実行して、マスター データベースと同じデータを取得します。

binlog とは何ですか?

メイン データベースがトランザクションをコミットするたびに、データの変更がbinlogと呼ばれるバイナリ ファイルに記録されます。注: binlogには書き込み操作のみが記録され、読み取り専用操作 ( selectステートメントやshowステートメントなど) は記録されません。

binlogの3つの形式

ステートメント形式: binlog実際に実行されたSQLステートメントを記録します
行形式: binlogupdate table_a set col1=value1 , col2=value2 ... where col1=condition1 and col2=condition2 ...
混合形式:デフォルトではstatement形式が選択され、 row形式は必要な場合にのみ使用されます。

Binlog フォーマットの比較

  • ステートメントレベル: binlogファイルが小さいという利点がありますが、マスターデータベースの遅いSQLがスレーブデータベースにも再び現れ、環境やコンテキストに依存する一部の関数が不整合なデータを生成する可能性があるという欠点があります。
  • 行レベル:欠点はファイルが大きいことです (ステートメントが複数の行を含む場合、n 倍に拡大されます)。利点は、前述の SQL の低速問題がなく、環境やコンテキストに依存しないことです。
  • 変更前後のデータを取得するには、 canal rowの使用を推奨します。

マスタースレーブ同期の2つの方法

  • 非同期同期:デフォルト モードでは、マスターとスレーブの切り替え中にデータが失われる可能性があります。マスター データベースがcommitかどうかは、マスター スレーブ同期プロセスとは関係がなく、認識されないためです。
  • 半同期:新しいバージョンのmysqlでサポートされている高可用性ソリューションです。マスターcommit結果をclientに返す前に、少なくとも 1 つのスレーブ (デフォルトは 1 で、特定の数を指定できます) がrelay logへの書き込みを確認する必要があります。

マスタースレーブ同期プロセス(半同期)

  • マスターに接続すると、スレーブは半同期レプリケーションをサポートしていることを示します。
  • マスター データベースは、半同期レプリケーションもサポートする必要があります。トランザクションcommit前に、マスター データベースはブロックされ、少なくとも 1 つのスレーブ データベースがタイムアウトになるまでrelay logackを書き込むのを待機します。
  • ブロッキング待機がタイムアウトすると、マスター データベースは一時的に非同期同期モードに戻ります。少なくとも 1 つのスレーブ データベースの半同期が進行に追いつくと、マスター データベースは半同期モードに戻ります。

半同期アプリケーションシナリオ

高可用性バックアップ:半同期レプリケーションにより、スレーブ データベースとマスター データベース間の一貫性が確保されます。マスター データベースに障害が発生した場合、スレーブ データベースに切り替えてもデータが失われることはありません。安定性を確保するため (遅い準同期によってメイン データベースのパフォーマンスが低下しないようにするため)、通常はビジネス トラフィックを処理せず、できるだけ早くack 、同期とバックアップにのみ使用されます。

2. マスタースレーブ同期アプリケーションシナリオ

一般的なシナリオ: オンラインスレーブの非同期同期と高可用性バックアップの半同期

高い一貫性が求められる大規模なデータ収集要件

大容量データの取得により、スレーブ データベースの CPU 使用率が急上昇し、ACK が遅くなる可能性があります。半同期に必要な ACK の数は 1 に設定できます。通常の状況では、高可用性バックアップは迅速にackできるため、マスター データベースはcommitて戻り、大容量データの取得とレプリケーションが遅くなっても問題ありません。この方法により、メイン データベースと業務は、大容量データ取得の遅いackの影響を受けません。

これで、MySQL のマスター スレーブ同期の原理とアプリケーションに関するこの記事は終了です。MySQL のマスター スレーブ同期の原理とアプリケーションに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MYSQLデータベースのマスタースレーブ同期設定の実装手順
  • MySQL マスタースレーブレプリケーション 準同期レプリケーション
  • Mysql データベースのマスタースレーブ同期構成
  • この記事では、MySQLのマスタースレーブ同期の原理を説明します。
  • MySQLはマスタースレーブ同期を構築して操作を実装します

<<:  JavaScript でよく使われる 3 つの Web エフェクトの詳細な説明

>>:  CSS3+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

推薦する

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...

MySQL 圧縮版 zip のインストールに関する問題の解決策

本日、MySQLの圧縮版をインストールする際に問題が発生しました。サービスが起動できず、2、3時間苦...

MySQLの重複排除操作を極限まで最適化する方法

目次1. インデックスと変数の賢い使用1. インデックスなしの比較テスト2. created_tim...

WeChatミニプログラムはどのようにしてユーザー情報とユーザーの電話番号を同時に取得するのか

今日ログインページを書いていたとき、個人情報と携帯電話番号を認証する必要がありましたが、ページにボタ...

Windows 10にOdoo12開発環境をインストールする方法

序文多くの友人は Mac コンピューターを持っていないと言っていますが、Windows 開発は実際に...

xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

【序文】最近、ITOO の試験システムのストレステストを行いたいので、自分のコンピュータに Lin...

MySQL テーブルを削除するときに外部キー制約を無視するシンプルな実装

テーブルを削除することはあまり一般的ではありませんが、特に外部キーの関連付けがあるテーブルの場合は、...

ウェブデザイナーが注意すべき 43 のウェブデザインの間違い

これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...

個人ブログシステムを構築するためのDockerの超シンプルな実装

Dockerをインストールするyumパッケージを最新バージョンに更新します: sudo yum up...

M1 ProチップでVueプロジェクトを開始する方法

目次導入Homebrewをインストールするnvmをインストールするノードをインストールするインストー...

jsイベント委譲の詳細な説明

1. 各関数はオブジェクトであり、メモリを占有します。メモリ内のオブジェクトが増えるほど、パフォーマ...

主軸上のFlex子要素の比率を制御する方法

背景フレックス レイアウトにより、配置とスペースの割り当てがより効果的に実現されます。最近、flex...

Vue プロジェクトに Electron を追加するための詳細なコード

1. package.jsonに追加する "メイン": "electr...

Linux システムファイル共有 samba 設定チュートリアル

目次sambaをアンインストールしてインストールする新しい共有パスを作成し、権限を設定するSamba...