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

推薦する

超大型フォントを使用した 40 の Web ページ デザイン

今日の Web デザインでは、非常に大きなフォントが表示される傾向があります。これらのオープンソース...

js 配列 fill() 充填メソッド

目次1. fill() 構文2. fill() の使用3. まとめ序文:配列の初期化方法についてはよ...

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 2. クロージャの役割2.1) メモリ2.2) プライベート変数...

MySQL 5.7.21 winx64 無料インストールバージョン設定方法グラフィックチュートリアル

MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...

Nginx 構成の実装 HTTPS セキュリティ認証

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

Linux でリモート サーバー ファイルの状態を表示する方法

以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...

jQueryはシャトルボックス効果を実現します

この記事では、シャトルボックス効果を実現するためのjQueryの具体的なコードを参考までに紹介します...

HTMLページの文字セットを指定する2つの方法

1. HTMLページの文字セットを指定する2つの方法方法1: <メタ文字セット="u...

Linux centos7 に phpMyAdmin をインストールするチュートリアル

yum install httpd php mariadb-server –yランプの動作環境を設定...

Mysqlクエリ条件で文字列の末尾にスペースがあっても一致しない問題の詳細な説明

1. テーブル構造テーブル人id名前1あなた2あなた(スペース) 3あなた(スペース2つ) 2. ク...

Nodejs-cluster モジュールの知識ポイントの概要と使用例

面接官から「NodeJS で複数のプロセスを開始する方法を教えてください」と尋ねられることがあります...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

すべてまたは逆の選択機能を実現するJavaScript

この記事では、全選択または選択を反転する機能を実現するためのJavaScriptの具体的なコードを参...