MySQL レプリケーションの利点と原則を詳しく説明します

MySQL レプリケーションの利点と原則を詳しく説明します

レプリケーションとは、マスター データベースの DDL および DML 操作をバイナリ ログを介してスレーブ データベースに転送し、スレーブ データベースでそれらを再実行することで、スレーブ データベースとマスター データベースのデータの同期を維持することです。 MySQL は、1 つのマスター データベースから複数のスレーブ データベースに同時に複製することができ、スレーブ データベースは他のスレーブ データベースのマスター データベースとして機能して、チェーン複製を実現することもできます。

MySQL レプリケーションの利点:

  • マスター データベースに障害が発生した場合、サービスはスレーブ データベースにすぐに切り替えられます。
  • スレーブ データベースでクエリ操作を実行して、マスター データベースへのアクセス負荷を軽減します。
  • バックアップ中にマスター データベースに影響を与えないように、スレーブ データベースでバックアップを実行します。

MySQL レプリケーションの原理

1. トランザクションがコミットされると、MySQL マスター データベースはデータの変更を Binlog にイベントとして記録します。マスター データベースの sync_binlog パラメータは、Binlog ログのディスクへのフラッシュを制御します。

2. マスター データベースは、Binlog 内のイベントをスレーブ データベースのリレー ログにプッシュします。スレーブ データベースは、リレー ログに基づいてイベントをやり直し、論理レプリケーションを通じてマスター データベースとスレーブ データベース間のデータの一貫性を実現します。

MySQL は、マスター データベースとスレーブ データベース間のデータ レプリケーションを完了するために 3 つのスレッドを使用します。Binlog Dump スレッドはマスター データベースで実行され、I/O スレッドと SQL スレッドはスレーブ データベースで実行されます。スレーブでレプリケーションを開始すると、まずマスターに接続するための I/O スレッドが作成されます。次に、マスターは Binlog Dump スレッドを作成し、データベース イベントを読み取り、それを I/O スレッドに送信します。I/O スレッドはイベント データを取得した後、それをスレーブのリレー ログに更新します。次に、スレーブの SQL スレッドがリレー ログ内の更新されたデータベース イベントを読み取り、それを適用します。

次の図に示すように:


メインライブラリを表示:

mysql> プロセスリストを表示\G; 
************************** 1. 行 **************************** 
   識別子: 3 
  ユーザー: root 
  ホスト: 10.24.33.187:54194 
   デシベル: NULL 
コマンド: スリープ 
  時間: 176 
 州:  
  情報: NULL 
************************** 2. 行 **************************** 
   識別子: 4 
  ユーザー: root 
  ホスト: 10.24.33.187:54195 
   デシベル: NULL 
コマンド: スリープ 
  時間: 176 
 州:  
  情報: NULL 
************************** 3. 行 **************************** 
   識別子: 8 
  ユーザー: root 
  ホスト: ローカルホスト 
   db:テスト 
コマンド: クエリ 
  時間: 0 
 状態: 開始 
  情報: プロセスリストを表示 
************************** 4. 行 **************************** 
   識別子: 12 
  ユーザー: repl 
  ホスト: dsz884.hcg.homecredit.net:39731 
   デシベル: NULL 
コマンド: Binlog Dump --Binlog Dump スレッド 時間: 87 
 状態: マスターはすべてのバイナリログをスレーブに送信しました。さらに更新を待機しています。このことから、同期が「プッシュ」方式で行われていることがわかります。情報: NULL 
セット内の 4 行 (0.00 秒) 
 
エラー:  
クエリが指定されていません

バックアップ ライブラリを表示します。

mysql> プロセスリストを表示\G; 
************************** 1. 行 **************************** 
   識別子: 1 
  ユーザー: システムユーザー 
  ホスト:  
   デシベル: NULL 
コマンド: 接続 
  時間: 4427 
 状態: マスターがイベントを送信するのを待機中 
  情報: NULL 
************************** 2. 行 **************************** 
   識別子: 2 
  ユーザー: システムユーザー 
  ホスト:  
   デシベル: NULL 
コマンド: 接続 
  時間: 2044 
 状態: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 
  情報: NULL

このことから、MySQL レプリケーションは非同期であり、スレーブ データベースとマスター データベースの間に一定の遅延があることがわかります。

関連ログをコピーする

1. BinlogBinlog は、MySQL のすべてのデータ変更操作を記録します。Binlog の形式は、次の方法で表示できます。Statement、Row、Mixed の 3 つのタイプがあります。

mysql> '%binlog_format%' のような変数を表示します。 
+---------------+-------+ 
| 変数名 | 値 | 
+---------------+-------+ 
| binlog_format | 行 | 
+---------------+-------+ 
セット内の 1 行 (0.00 秒)

2. リレー ログ リレー ログのファイル形式と内容は Binlog と同じです。唯一の違いは、スレーブの SQL スレッドが現在のリレー ログ内のイベントを実行した後、SQL スレッドがスペースを解放するためにリレー ログを自動的に削除することです。スレーブがクラッシュして再起動した後も、スレーブの I/O スレッドと SQL スレッドがレプリケーションを開始する場所を確実に認識できるように、スレーブはデフォルトで 2 つのログ ファイル (master.info と relay-log.info) を作成し、レプリケーションの進行状況を保存します。これらの 2 つのファイルには、現在マスターの Binlog を読み取っているスレーブの I/O スレッドの進行状況と、リレー ログを適用している SQL スレッドの進行状況が記録されます。

mysql> スレーブステータスを表示します \G; 
************************** 1. 行 **************************** 
        Slave_IO_State: マスターがイベントを送信するのを待機中 
         Master_Host: 10.24.33.186 -- メインデータベース IP 
         Master_User: repl -- マスタースレーブレプリケーションに使用されるマスターデータベースのユーザーアカウント Master_Port: 3306 -- マスターデータベースポート Connect_Retry: 60  
       Master_Log_File: mysql-bin.000005 --スレーブ ライブラリ I/O スレッドによって現在読み取られているマスター ライブラリ Binlog のファイル名 Read_Master_Log_Pos: 4356 --スレーブ ライブラリ I/O スレッドによって読み取られたマスター ライブラリ Binlog の位置 Relay_Log_File: strong-relay-bin.000006 --SQL スレッドによって適用されているリレー ログ 
        Relay_Log_Pos: 320 --リレーログの場所 Relay_Master_Log_File: mysql-bin.000005 --リレーログに対応するBinlog 
       スレーブIO実行中: はい 
      スレーブSQL実行中: はい 
       レプリケート_Do_DB:  
     レプリケート_無視_DB:  
      テーブルの複製:  
    無視テーブルを複製:  
   Replicate_Wild_Do_Table:  
 Replicate_Wild_Ignore_Table:  
          最終エラー番号: 0 
          最終エラー:  
         スキップカウンタ: 0 
     Exec_Master_Log_Pos: 4356 --SQL スレッドは、Binlog の場所に対応するリレー ログの場所を適用しています。Relay_Log_Space: 1153 
       Until_Condition: なし 
        ログファイルまで:  
        ログ位置まで: 0 
      マスターSSL許可: いいえ 
      マスターSSLCAファイル:  
      マスターSSLCAパス:  
       マスターSSL証明書:  
      マスターSSL暗号:  
        マスターSSLキー:  
    マスターより遅れている秒数: 0 
Master_SSL_Verify_Server_Cert: いいえ 
        最終IOエラー番号: 0 
        最後のIOエラー:  
        最終SQLエラー番号: 0 
        最後のSQLエラー:  
 Replicate_Ignore_Server_Ids:  
       マスターサーバーID: 1 
         マスター_UUID: 2a3e3fd9-0587-11e8-bdb8-0800272325a8 
       マスター情報ファイル: /usr/local/mysql-5.7.21-el7-x86_64/data/master.info 
          SQL_遅延: 0 
     SQL_残り遅延: NULL 
   Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 
      マスター再試行回数: 86400 
         マスターバインド:  
   最終IOエラータイムスタンプ:  
   最終SQLエラータイムスタンプ:  
        マスターSSL証明書:  
      マスターSSLCrlパス:  
      取得済み_Gtid_Set:  
      実行されたGtidセット:  
        自動位置: 0 
     Replicate_Rewrite_DB:  
         チャンネル名:  
      マスター TLS バージョン:  
セット内の 1 行 (0.00 秒) 
 
エラー:  
クエリが指定されていません 
 
マイSQL>

MySQL レプリケーション方法

MySQL レプリケーションの 3 つのテクノロジーに対応する 3 つの Binlog 形式があります。

MySQL レプリケーション アーキテクチャ

MySQL レプリケーションの一般的なアーキテクチャには、1 つのマスターと複数のスレーブのレプリケーション アーキテクチャ、マルチレベル レプリケーション アーキテクチャ、およびデュアル マスター レプリケーション (デュアル マスター) アーキテクチャがあります。

1. 1 マスター - 複数スレーブ アーキテクチャ マスター データベースの読み取り要求の負荷が非常に高いシナリオでは、1 マスター - 複数スレーブ レプリケーション アーキテクチャを構成することで、読み取りと書き込みの分離が実現されます。高いリアルタイム パフォーマンスを必要としない読み取り要求は、負荷分散によって複数のスレーブ データベースに分散され、図に示すように、マスター データベースの読み取り負荷が軽減されます。


2. マルチレベル レプリケーション アーキテクチャ 1 つのマスターと複数のスレーブのアーキテクチャは、特に高い読み取り要求圧力があるほとんどのシナリオのニーズを解決できます。MySQL レプリケーションは、マスター データベースが Binlog をスレーブ データベースにプッシュするため、スレーブ データベースの増加に伴って、マスター データベースの I/O 圧力とネットワーク圧力が増加します (各スレーブ データベースには、マスター データベース上に Binlog イベントを送信するための独立した Binlog Dump スレッドがあります)。マルチレベル レプリケーション アーキテクチャは、図に示すように、1 つのマスターと複数のスレーブのシナリオで、マスター データベースの追加 I/O とネットワーク圧力のシナリオを解決します。

3. デュアル マスター レプリケーション/デュアル マスター アーキテクチャ デュアル マスター レプリケーション/デュアル マスター アーキテクチャは、DBA がメンテナンスのためにマスターとスレーブを切り替える必要があるシナリオに特に適しています。このアーキテクチャでは、図に示すように、スレーブ ライブラリを繰り返し構築する手間が省けます。

以下もご興味があるかもしれません:
  • MySQLのレプリケーションとチューニングの原則と方法を分析する
  • Linux での MySQL データベースのマスター スレーブ同期レプリケーション構成
  • MySql マスタースレーブレプリケーションを実装する Docker 方式の詳細説明 (実践編)
  • MySQLのレプリケーションの詳細な分析
  • MySQL 高可用性ソリューション MMM (MySQL マルチマスター レプリケーション マネージャー)
  • MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明
  • Mysql5.7.18 のインストールとマスタースレーブレプリケーションの詳細なグラフィック説明
  • MySQL マスタースレーブレプリケーションプロセスの詳細な説明
  • pt-heartbeat を使用して MySQL レプリケーションの遅延を監視する方法の詳細な説明
  • MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明
  • docker を使用して MySQL マスタースレーブレプリケーション環境を迅速に構築する方法の詳細な説明
  • MySQL の準同期レプリケーションについての簡単な説明

<<:  Linux システムに Spring Boot アプリケーションをインストールするための詳細なチュートリアル

>>:  いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

推薦する

Dockerコンテナのセルフスタートを実装する方法

コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...

JavaScript で大きなファイルの並列ダウンロードを実装する方法

目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...

mysql 8.0.19 winx64.zip インストール チュートリアル

この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...

Docker nginx + https サブドメイン設定の詳細なチュートリアル

今日はたまたま友人のサーバーの移転を手伝うことになり、サーバーの基本的な設備の設定を行ったのですが、...

win10環境でDockerをインストールする実装

1. Docker公式サイトにアクセスするまず、Dockerの公式ウェブサイトにアクセスして、最新の...

マウスを傾けた状態でのフリップナビゲーションの問題に関する研究

この記事では、マウス フリップナビゲーションの制作についてまだ疑問を持っている友人の役に立つことを期...

jsは徐々に増加するデジタルアニメーションを実現します

目次背景コンテナを固定し、数字を上にスクロールすることで、スクロールホイールと同様の効果を実現します...

CentOS での samba フォルダ共有サーバー構成の詳細な説明

1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...

H5レイアウト実装手順における天井と底部の吸引を解決するための純粋なCSS

どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...

JavaScript サンドボックスの探索

目次1. シナリオ2. サンドボックスの基本機能3. iframeの実装4. Webワーカーの実装5...

Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体

1. Expressライブラリとジェネレータをインストールするcmdを開いて、次のコマンドを入力しま...

インタビューの質問: ホーリー グレイル レイアウトとダブル ウィング レイアウトの違い

序文今日は、聖杯レイアウトとダブルウィングレイアウト、そしてそれらの違いについてお話しします。この2...

Vue ベースの Excel 解析とエクスポートの詳細な説明

目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...

Linuxのsortコマンドの複数のパラメータを理解するための1つの質問

sort コマンドは非常によく使用されますが、-o、-n、-u、-r などの多くのパラメーターがあり...