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

推薦する

シェルスクリプト nginx 自動化スクリプト

このスクリプトは、nginxの起動、停止、再起動の操作を満たすことができます。 #!/bin/bas...

JavaScript Alert関数の実行順序の詳細な説明

目次質問分析する解決するAlert() 関数を置き換えるsetTimeOut関数まとめ質問数日前、J...

Vue Element Sortablejs を使用してテーブル列をドラッグする詳細な説明

1. css: ドラッグテーブル.css @charset "UTF-8"; ....

Hadoop 3.2.0 クラスターの構築に関する一般的な考慮事項

1つのポートの変更バージョン 3.2.0 では、ネームノード ページ ポートは 9870、データノー...

JavaScript による省・市連携効果の実現

この記事では、省と都市間の連携効果を実現するためのJavaScriptの具体的なコードを参考までに共...

HTML 編集の基礎 (初心者必読)

DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...

UDP DUP タイムアウト UPD ポート状態検出コード例

以前、単純な UDP サーバーとクライアントの例を書きましたが、その中で、自分自身をクライアントと見...

フロントエンドの HTML 知識ポイントのまとめ (推奨)

1. HTMLの概要htyper テキスト マークアップ言語 ハイパーテキスト マークアップ言語ハ...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

Apache Tomcat と IDEA エディターの統合に関する詳細なチュートリアル

1. Apache Tomcat 公式サイトから Tomcat 圧縮パッケージをダウンロードします。...

Zabbix上のすべてのホストのIPとホスト名を取得する

ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...

Element-ui NavMenuサブメニューを使用して再帰的に生成する場合のエラーの詳細な説明

ナビゲーションバーのサブメニューを再帰的に生成すると、メニューは正常に生成できるが、マウスをホバーす...

MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明

目次パーティション分割メカニズムSELECTクエリINSERT操作DELETE操作更新操作パーティシ...

Linuxテキスト処理ツールの詳細な説明

1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...

MySQLデータベースインデックスの詳細な説明

目次1. MySQLインデックスの紹介2. MySQLの5種類のインデックスの詳しい説明1. 総合索...