レプリケーションとは、マスター データベースの 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 がメンテナンスのためにマスターとスレーブを切り替える必要があるシナリオに特に適しています。このアーキテクチャでは、図に示すように、スレーブ ライブラリを繰り返し構築する手間が省けます。 以下もご興味があるかもしれません:
|
<<: Linux システムに Spring Boot アプリケーションをインストールするための詳細なチュートリアル
>>: いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる
コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...
目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...
この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...
今日はたまたま友人のサーバーの移転を手伝うことになり、サーバーの基本的な設備の設定を行ったのですが、...
1. Docker公式サイトにアクセスするまず、Dockerの公式ウェブサイトにアクセスして、最新の...
この記事では、マウス フリップナビゲーションの制作についてまだ疑問を持っている友人の役に立つことを期...
目次背景コンテナを固定し、数字を上にスクロールすることで、スクロールホイールと同様の効果を実現します...
1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...
どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...
目次1. シナリオ2. サンドボックスの基本機能3. iframeの実装4. Webワーカーの実装5...
1. Expressライブラリとジェネレータをインストールするcmdを開いて、次のコマンドを入力しま...
序文今日は、聖杯レイアウトとダブルウィングレイアウト、そしてそれらの違いについてお話しします。この2...
目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...
sort コマンドは非常によく使用されますが、-o、-n、-u、-r などの多くのパラメーターがあり...
<!--[lte IE 6の場合]> <![endif]--> IE6以下で...