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 インターフェースとアニメーション効果

推薦する

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...

MySQL の order by ステートメントの最適化方法の詳細な説明

この記事では、ORDER BY文の最適化について学びます。その前に、インデックスの基礎的な理解が必要...

Navicatを使ってMySQLを操作する方法

目次序文: 1. Navicatの紹介2. シンプルなチュートリアルの共有接続管理ライブラリテーブル...

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

純粋なCSS3で実装されたネオンライト効果

達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...

iframe を更新する 3 つの方法

コードをコピーコードは次のとおりです。 <iframe src="1.htm&quo...

Linux telnetコマンドの使用

1. はじめにtelnet コマンドは、リモート ホストにログインするために使用されます。これは、T...

MySQL 圧縮パッケージ版 zip インストール設定方法

圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...

html、xhtml、xmlの違い

開発動向: html (ハイパーテキスト マークアップ言語) - xhtml (拡張ハイパーテキスト...

フロントエンドJSサンドボックスを実装するいくつかの方法についての簡単な説明

目次序文iframeはサンドボックスを実装しますdiffメソッドを使用したサンドボックスの実装プロキ...

透明な入力ボックスにアイコンを追加する HTML コード

最近、弁護士推薦のウェブサイトを作成していたのですが、検索ボックスに問題がありました。検索ボックス内...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法

目次問題の説明:原因分析:解決:補足: Reactでは、フックが使用されている場合、useState...