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

推薦する

MySQL 8.0.17 をインストールしてリモート アクセスを構成する方法

1. インストール前の準備データベースのバージョンを確認するコマンド: mysql --versio...

Vue vee-validateプラグインの簡単な使い方

目次1. インストール2. インポート3. 検証ルールを定義します(エクスポート用に js ファイル...

XHTMLコードの一般的なアプリケーション問題をまとめる

<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...

MySQL 5.7.20\5.7.21 無料インストール版のインストールと設定のチュートリアル

参考までに、mysql 5.7.20 / 5.7.21 をダウンロード、インストール、構成します。具...

docker リモート API のワンクリック TLS 暗号化の実装

目次1. Docker の 2375 ポートを別のポートに変更します。これは一時的な対策にすぎません...

MySQL で指定した桁数の乱数を生成する方法と、バッチで乱数を生成する方法

1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...

TS 数値区切り文字とより厳密なクラス属性チェックの詳細な説明

目次概要演算子の改良と正確なinstanceofよりスマートなオブジェクトリテラル推論固有のシンボル...

Vmware での Ubuntu サーバーのインストール チュートリアル

この記事では、Ubuntuサーバーバージョンのインストールグラフィックチュートリアルを参考までに紹介...

VMware + Ubuntu18.04 による Hadoop クラスタ環境の構築に関するグラフィック チュートリアル

目次序文VMware クローン仮想マシン (準備、3 台の仮想マシンのクローン、1 台のマスター、2...

Linux で特定のユーザーにフォルダーのすべてのコンテンツを許可するにはどうすればよいですか?

【問題分析】 chown コマンドを使用できます。ここで ch は change (変更) を表し...

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明最近、...

HTML の順序なしリストタグと順序付きリストタグの使用例

1. 上部と下部のリストタグ: <dl>..</dl>:上dt下層dd: カ...

WMLとは何ですか?

WML (ワイヤレス マークアップ言語)。これは HTML から派生したマークアップ言語ですが、W...

JSのアンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。

アンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。 1. アンカ...

フォームから Vue ElementUI を使用してログイン効果を実装する例

目次1. ElementUIで基本的なスタイルを構築する2. [送信]ボタンをクリックして、アカウン...