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+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

推薦する

ZabbixはSNMPに基づいてLinuxホストを監視します

序文: Linux ホストは、エージェント プログラムをインストールする場合でも、SNMP を使用す...

html の img src="" で js 関数または js 変数を呼び出して、画像パスを動的に指定します。

この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...

MYSQLクエリデータの結果に自動的に番号を付ける方法

序文実際、クエリ中に結果に番号が付けられるこのような状況に遭遇したことは一度もありません。同僚が転職...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

Alibaba Cloud OSS アクセス権設定(RAM 権限制御)実装

シナリオmyBuket の static/material/ ディレクトリなど、Alibaba Cl...

Vue3+スクリプト設定+ts+Vite+Volarプロジェクト

目次Viteを使用してvue + tsプロジェクトを作成するVue 3の3つの構文オプションAPIコ...

Azure Container Registry を使用してイメージを保存する際の問題

Azure Container Registry は、Docker Registry 2.0 仕様に...

Tomcat のインストール後に起こりうる問題の紹介

1. Tomcatサービスが開いていませんブラウザのアドレスバーにlocalhost:8080と入力...

階段効果を実現するためのWeChatアプレットカスタムメニューナビゲーション

設計意図ページを開発する際には、ページ上のナビゲーション メニューをクリックしたときにページを対応す...

Dockerは同じIPネットワークセグメントとの接続を実現する

最近、Docker とホストが同じネットワーク セグメント上で通信する問題を解決し、そのプロセス全体...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

MySQL データベースの手動およびスケジュールされたバックアップ手順

目次手動バックアップタイマーバックアップ手動バックアップ1) cmd コンソール: mysqldum...

MySQLの累積集計原理と使用例の分析

この記事では、例を使用して、MySQL 累積集計の原理と使用方法を説明します。ご参考までに、詳細は以...

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

CSS3 背景コントロールプロパティと色遷移を使用してグラデーション効果を実現します。

CSS3 背景画像関連互換性: IE9+背景クリップ 背景画像描画領域background-cli...