ホームページ  >  記事  >  データベース  >  MySQL5.7 グループ送信と並列レプリケーションのサンプル チュートリアル

MySQL5.7 グループ送信と並列レプリケーションのサンプル チュートリアル

PHP中文网
PHP中文网オリジナル
2017-06-20 15:13:181263ブラウズ
MySQL バージョン 5.5 以降、MySQL の非常に重要な機能である並列レプリケーション メカニズムが導入されました。
MySQL 5.6 は、ディメンションとしてスキーマを使用した並列レプリケーションのサポートを開始します。つまり、binlog 行イベントが異なるスキーマのオブジェクトで動作する場合、DDL と外部キーの依存関係がないと判断された場合、並列レプリケーションを実現できます。
コミュニティでは、テーブルをディメンションとして使用するバージョン、またはレコードをディメンションとして使用するバージョンも導入しました。これは、スキーマ、テーブル、レコードのいずれであっても、スタンバイ データベース スレーブがリアルタイムで行形式でイベントを解析することに基づいて判断を行います。競合がないことを確認し、並列処理を実現するために分散します。
MySQL5.7 のマルチスレッド スレーブ、つまり MTS は、メイン データベースの並列性を最大化することが期待されます。これを達成する方法は、スレーブ ノードが実行できるように、必要な情報を binlog イベントに追加することです。この情報に基づいて並列レプリケーションを実装します。
MySQL 5.7 の並列レプリケーションはグループ コミットに基づいており、メイン データベースで完了できる準備済みステートメントはすべて、データの競合がないことを示しており、スレーブ ノードで並列レプリケーションできます。
MySQL 5.7 のグループ送信に関しては、次のパラメータを確認する必要があります:
mysql> show global variables like '%group_commit%';+-----------------------------------------+-------+| Variable_name | Value |+-----------------------------------------+-------+| binlog_group_commit_sync_delay | 0 || binlog_group_commit_sync_no_delay_count | 0 |+-----------------------------------------+-------+2 rows in set (0.00 sec)

binlog_group_commit_sync_delay このパラメータは、ディスクをフラッシュする前にログの送信を待機する時間を制御します。デフォルトは 0 です。つまり、送信直後にディスクをフラッシュします。0 より大きい値に設定すると、複数のログの同僚が同時にディスク フラッシュを送信できます。これをグループ送信と呼びます。グループ送信は並列レプリケーションの基礎です。この値を 0 より大きく設定すると、グループ送信機能がオンになることを意味します。最大値は 1000000 マイクロ秒にのみ設定できます。
binlog_group_commit_sync_no_lay_count、このパラメータは、binlog_group_commit_sync_delay の待機時間内に、モノの数が binlog_group_commit_sync_no_lay_count で設定されたパラメータに達すると、グループ送信がトリガーされることを意味します。この値が 0 に設定されている場合、影響はありません。時間に達してもトランザクション数に達していない場合は、グループ送信操作も実行されます。
グループ送信は、より楽しい方法です。MySQL の binlog に基づいて、グループ送信で何が起こっているかを確認できます。
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000005 |grep last_committed
#170607 11:24:57 server id 353306 end_log_pos 876350 CRC32 0x92093332 GTID last_committed=654 sequence_number=655#170607 11:24:58 server id 353306 end_log_pos 880406 CRC32 0x344fdf71 GTID last_committed=655 sequence_number=656#170607 11:24:58 server id 353306 end_log_pos 888700 CRC32 0x4ba2b05b GTID last_committed=656 sequence_number=657#170607 11:24:58 server id 353306 end_log_pos 890675 CRC32 0xf8a8ad64 GTID last_committed=657 sequence_number=658#170607 11:24:58 server id 353306 end_log_pos 892770 CRC32 0x127f9cdd GTID last_committed=658 sequence_number=659#170607 11:24:58 server id 353306 end_log_pos 894757 CRC32 0x518abd93 GTID last_committed=659 sequence_number=660#170607 11:37:46 server id 353306 end_log_pos 895620 CRC32 0x99174f95 GTID last_committed=660 sequence_number=661#170607 11:37:51 server id 353306 end_log_pos 895897 CRC32 0xb4ffc341 GTID last_committed=661 sequence_number=662#170607 11:38:00 server id 353306 end_log_pos 896174 CRC32 0x6bcbc492 GTID last_committed=662 sequence_number=663#170607 11:39:40 server id 353306 end_log_pos 896365 CRC32 0x1fe16c7c GTID last_committed=663 sequence_number=664

上記は、グループ送信を有効にしていないログです。 binlog には、last_committed と sequence_number の 2 つのパラメータがあります。次のことがわかります。
メイン ライブラリがグループ送信を設定した後、次のパラメータをスレーブ ライブラリに追加する必要があります。last_committed は常に同じです。前のものの sequence_number は同じです。これも分かりやすく、順番に提出されていくので、理解しても不思議ではありません。
グループ送信モードで物事を見てみましょう:
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000008|grep last_commit
#170609 10:11:07 server id 353306 end_log_pos 75629 CRC32 0xd54f2604 GTID last_committed=269 sequence_number=270#170609 10:13:03 server id 353306 end_log_pos 75912 CRC32 0x43675b14 GTID last_committed=270 sequence_number=271#170609 10:13:24 server id 353306 end_log_pos 76195 CRC32 0x4f843438 GTID last_committed=270 sequence_number=272

最後の 2 つのものの last_committed が同じであることがわかります。これは 2 つのものが送信されたことを意味しますか? group として、2 つは perpare truncation で同じ last_committed を取得し、最終的にはグループとして送信されます。これをグループ提出といいます。
#MTS
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=8 #太多的线程会增加线程间同步的开销,建议4-8个slave线程
master_info_repository=TABLErelay_log_info_repository=TABLErelay_log_recovery=ONslave-parallel-type有两个之,DATABASE和LOGICAL_CLOCK,DATABASE: 默认值,兼容5.6以schema维度的并行复制, LOGICAL_CLOCK: MySQL 5.7基于组提交的并行复制机制。

要約すると、MySQL5.7 の並列レプリケーションは、メイン ライブラリのグループ コミットとスレーブ ライブラリの次のパラメータの設定に基づいています。

+------------------------+---------------+| Variable_name | Value |+------------------------+---------------+| slave_parallel_type | LOGICAL_CLOCK || slave_parallel_workers | 8 |+------------------------+---------------+2 rows in set (0.01 sec)
To MySQL 5.7 の並列レプリケーションを使用する場合は、まずマスター データベースで binlog_group_commit_sync_lay を 0 より大きく設定し、次にスレーブ データベースでスレッドの数と関連メソッドを設定する必要があります。上記で設定した値は 8 です。スレーブ ライブラリからは、スレーブ ライブラリには 1 つではなく 8 つのスレッドが処理を待機していることがわかります。

以上がMySQL5.7 グループ送信と並列レプリケーションのサンプル チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。