MySQLのレプリケーションとチューニングの原則と方法を分析する

MySQLのレプリケーションとチューニングの原則と方法を分析する

mysql のデフォルト値は full ですが、これを minimal に変更するのが最適です。

binlog_row_image=最小限

4. マスタースレーブレプリケーションの遅延

マスター データベースとスレーブ データベースは同じホスト上にないため、データ同期に遅延が発生します。解決策は、キャッシュを追加し、ビジネス レイヤーがジャンプするのを待つことです。データベース レベルから遅延の問題を軽減する必要がある場合は、レプリケーションの 3 つの主要な手順 (マスター データベースがログを生成し、マスターとスレーブ間の転送ログが生成され、スレーブ データベースがログの内容を復元する) から始めることができます。

1. マスターデータベースがログに書き込む速度

メイン データベースのトランザクション サイズを制御し、大きなトランザクションを複数の小さなトランザクションに分割します。

たとえば、200,000 行のデータを挿入する場合は、一度に 5,000 行を挿入できます (ページングの考え方を使用できます)。

2. マスターとスレーブ間のバイナリログ転送時間

マスター サーバーとスレーブ サーバーは、可能な限り同じコンピューター ルームまたは地域に配置する必要があります。

ログフォーマットがMIXEDに変更され、設定行のログフォーマットが最小限ではなくなりました。原理の詳細については、上記のログフォーマットの紹介を参照してください。

3. ライブラリからログを復元する時間を短縮する

MySQL バージョン 5.7 以降では、論理クロック方式を使用して SQL マルチスレッドを割り当てることができます。

論理クロックを設定します: slave_parallel_type = 'logical_clock';

レプリケーション スレッドの数を設定します: slave_parallel_workers=4;

5. 留意点

MySQL を再起動する場合は、MySQL ユーザーに切り替えてから操作を実行するのが最適です。そうしないと、ファイルの起動後に権限の問題が発生します。 MySQL 環境をセットアップした後、構成で log-bin オプションを設定します。こうすることで、将来データベースからデータベースをコピーする必要がある場合でも、データベースを再起動して業務を中断する必要がなくなります。メイン データベースのファイアウォールの対応する mysql ポートを開く必要があります。スレーブデータベースは、ポーリングではなくマスターデータベースから送信される情報をリッスンすることでマスターデータベースと同期するため、通信障害が発生した場合、再接続後にマスターデータベースがデータの変更を行わないと、スレーブデータベースはデータを同期しません。そのため、空のトランザクションを挿入することでデータを同期できます。

以上が今回編集部がまとめた内容の全てです。123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 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 の準同期レプリケーションについての簡単な説明
  • MySQL レプリケーションの利点と原則を詳しく説明します

1. はじめに

MySQL にはレプリケーション ソリューションが付属しており、次のような利点があります。

データのバックアップ。

負荷分散。

分散データ。

コンセプト紹介:

マスター: 複製されるデータベース。

スレーブ: マスターのデータを複製するデータベース。

再現手順:
(1)マスターは変更の詳細を記録し、バイナリログに保存します。
(2)マスターはスレーブに同期メッセージを送信する。
(3)スレーブはメッセージを受信後、マスターのバイナリログをローカルリレーログにコピーします。
(4)スレーブはリレーログ内のメッセージを再現し、データベースデータを変更する。

このプロセスを説明する典型的な図を以下に示します。

2. レプリケーションの実装

レプリケーションを実装するには、次の手順が必要です。

1. MySQLマスターライブラリのバイナリログとサーバーIDを設定する

MySQL設定ファイルは通常/etc/my.cnfに保存されます。

# [mysqld] の下に設定オプション [mysqld] を追加する
サーバーID=1
ログ bin = mysql-bin.log

server-id は、データベース クラスター全体におけるデータベースの一意の識別子であり、一意である必要があります。
MySQLを再起動します。

注: このファイルがすでに MySQL 構成ファイルで構成されている場合には、この手順をスキップできます。

2. 新しいコピーアカウントを作成する

データベースからマスター データベース データをコピーするための新しいアカウントをマスター データベースに作成し、コピー権限を付与します。

mysql> GRANT REPLICATION SLAVE、REPLICATION CLIENT ON *.* TO user_name@'host' IDENTIFIED BY 'password';

3. MySQLマスターデータベースのサーバーIDを設定する

2 番目のステップの構成と同様に、注意すべき点が 2 つあります。

スレーブ ライブラリを他のスレーブ ライブラリのマスター ライブラリとして使用する必要がない場合は、バイナリ ロギングを構成する必要はありません。多くの場合、レプリケーションでは、マスター データベース内のすべてのデータベース (特に MySQL 情報構成データベース) のレプリケーションは必要ありません。したがって、replicate_do_dbを設定してレプリケートされたデータベースを指定することができます。4.データベースからマスターデータベースのデータを初期化します。

データ量が多くない場合は、mysqldump ツールを使用してマスター データベースのデータをエクスポートし、スレーブ データベースにインポートできます。

mysqldump --single-transaction --triggers --master-data データベース名 > data.sql

データ量が多い場合は、ここでは紹介されていない Xtrabackup を使用してデータベースをエクスポートする必要があります。
初期化にバイナリ ログを直接使用しないのはなぜかと疑問に思う学生もいるかもしれません。

マスター データベースが長時間実行されている場合、バイナリ ログに従ってスレーブ データベースを使用してデータをコピーするのは適切ではありません。バイナリ ログを直接使用してスレーブ データベースを初期化すると、時間がかかり、パフォーマンスが低下します。ほとんどの場合、マスター データベースのバイナリ ログ構成項目はオンになっていないため、以前の操作のバイナリ ログは存在しません。 5. レプリケーションを有効にする

ライブラリから次のコマンドを実行します

mysql> MASTERをMASTER_HOST='host'に変更します。
-> MASTER_USER='ユーザー'、
-> MASTER_PASSWORD='パスワード',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;

最後の 2 つのコマンド、MASTER_LOG_FILE と MASTER_LOG_POS に注意してください。これらは、ライブラリから読み取りを開始するバイナリ ファイルとオフセットの開始位置を示します。これらの 2 つのパラメーターは、インポートした SQL にあります。

レプリケーションを有効にする

スレーブを起動します。

この時点でレプリケーションは完了です。マスター データベースでデータが更新されたり、新しいデータが追加されたりすると、その結果をスレーブ データベースで照会できます。


レプリケーション スレッドのステータスは、マスター データベースで照会することもできます。

3. レプリケーションログの形式

マスター データベースがデータを保存する方法に応じて、MySQL レプリケーションには 3 つのログ形式があります。

コピー方法特徴アドバンテージ欠点
行形式のコピーに基づいて、変更する必要がある各行のデータ情報を記録します。 SQL ステートメントが 2w 行のデータを変更する場合、2w 行のログ形式が記録されます。データの強い一貫性が保証され、実行後の結果が記録されるため、スレーブデータベースへの復元が高速になります。ログレコードの数が多く、マスターとスレーブ間の転送に時間がかかります。
声明セグメントベースのログ形式のレプリケーション。つまり、変更された行レコードではなく、変更された SQL レコードを記録します。ログ記録は最小限です。出力結果が不確定な関数の中には、スレーブデータベースで実行した場合に問題が発生するものがあります。例えば、スレーブデータベースがログに基づいてマスターデータベースのデータを復元する場合、再度 SQL を実行する必要があり、比較的長い時間がかかります。
混合上記の 2 つのログ形式を組み合わせてログを記録します。どのログ形式を使用するかは MySQL 自体が決定します。上記の 2 つのログ形式の長所と短所はバランスが取れています。

MySQL 5.7 より前では、ステートメント形式がデフォルトで使用されていました。

設定方法は構成ファイルで設定できます (推奨):

binlog_format=行

または、一時的にグローバル変数を設定します (現在の MySQL 接続は有効です)。

ログ形式を表示します。mysql > show variables like 'binlog_format';
ログ形式を設定するmysql> set binlog_format='row';

通常、マスターサーバーとスレーブサーバーの 2 つは同じコンピュータルームに配置されるため、2 つのサーバー間の同期速度は速くなります。強力な一貫性を確保するには、行ログ形式 (行) を優先する必要があります。転送速度を確保するには、混合モード (混合) を選択できます。
ラインのログ形式には、次の 3 つの記録モードがあります。

記録方法特徴
最小限変更された列のデータのみを記録する
満杯変更された行のすべての列のデータを記録する
ノブロブ機能は上記と同じですが、BLOB 型およびテキスト型の列が変更されていない場合、これらの列 (つまり、大きなデータ列) のデータは記録されません。

<<:  Dockerイメージをプルしてバージョンを確認する方法

>>:  JS Canvas インターフェースとアニメーション効果

推薦する

Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

結論:マルチスレッド環境では、スレッドの 1 つがクラッシュすると、他のスレッド (プロセス全体) ...

CSS マスクを使用して PNG 画像のサイズを大幅に最適化します (推奨)

この記事は共有および集約することを歓迎します。全文を転載する必要はありません。著作権を尊重してくださ...

MySQLバックアップとリカバリの実践に関する詳細な説明

1. mysqlbackup の紹介mysqlbackup は、MySQL Enterprise B...

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

Mysql の一般的なベンチマーク コマンドの概要

mysqlslap共通パラメータの説明–auto-generate-sql システムはテスト用のSQ...

MySQL の日付と時刻関数の概要 (MySQL 5.X)

1. MySQLは現在の日付と時刻を取得する関数1.1 現在の日付 + 時刻 (日付 + 時刻) ...

jQueryは広告の表示と非表示のアニメーションを実装します

数秒後に広告が表示されて消えることがよくあります。この機能を実装するには、JQuery フレームワー...

Zabbixは複数のmysqlプロセスの監視を実装します

1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...

Jenkins の紹介と Docker で Jenkins をデプロイする方法

1. 関連概念1.1 Jenkins の概念: Jenkins は、使用されるプラットフォームに関係...

CSS を使用して三角形を実装する一般的な手法 (複数の方法)

面接の経験によっては、CSS に関する質問がよく見られ、CSS を使用して三角形を描画する方法につい...

Linuxのファイル操作の知識ポイントを詳しく解説

ファイル操作に関連するシステムコール作成するint creat(const char *ファイル名,...

CSS スタイルにおける中国語フォントのフォントファミリーに対応する英語名の詳細な説明

ソングティ: SimSun太字: SimHeiマイクロソフト YaHei: マイクロソフト YaHe...

Nginx で Basic Auth ログイン認証を設定する方法

nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...

Node.js を使用して png 画像に透明なピクセルがあるかどうかを判断する方法

背景PNG 画像は jpg 画像よりも多くのストレージスペースを占有しますが、PNG 画像の品質は大...