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

推薦する

JS の toFixed() メソッドの丸め精度の問題の詳細な説明

目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...

JavaScript カウントダウン プロンプト ボックス

この記事の例では、カウントダウンプロンプトボックスを実装するためのJavaScriptの具体的なコー...

Vuex環境の詳細な説明

目次Vuex環境を構築する要約するVuex環境を構築するsrcディレクトリにフォルダstoreを作成...

デジタルテーブル特殊効果を実現するネイティブJS

この記事では、ネイティブ JS で実装されたデジタル時計エフェクトを紹介します。エフェクトは次のとお...

CentOS 7 で grub パスワードと単一ユーザー ログインを設定するサンプル コード

Centos7 と Centos6 では、GRUB パスワードの設定手順に大きな違いがあります。これ...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...

sql_mode を変更する際の MySQL エラーの解決方法

目次ERR 1067による殺人事件2番目の問題の原因はsql_modeです3. sql_modeを設...

React イベントバインディングの詳細

目次クラスコンポーネントイベントバインディング関数コンポーネントイベントバインディング要約するRea...

LinuxでIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

HTML 要素に注釈を付けるときにクラスと ID のどちらが優れているかを分析する

Web ページには、非常に複雑な HTML 構造があります。CSS を使用して関連するスタイルを定義...

スライドドアを実装するための CSS サンプルコード

いわゆるスライディングドアテクノロジーとは、さまざまな長さのテキストに合わせてボックスの背景を自動的...

HTML ウェブページにおけるさまざまなフォント形式の詳細

このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...

js を使用して過去 1 週間、1 か月、3 か月の時間を取得する簡単な例

目次過去1週間の時間を取得する過去1か月の時間を取得する過去3か月分を取得新しい Date() と ...

Axiosは繰り返しのリクエストをキャンセル

目次序文1. リクエストをキャンセルする方法2. 重複リクエストの判定方法3. 繰り返しリクエストを...

Spring jdbc のデータベース操作オブジェクト モデルの詳細な例

Spring jdbc のデータベース操作オブジェクト モデルの詳細な例Spring Jdbc デー...