ホームページ >データベース >mysql チュートリアル >mysqlのマスター/スレーブ同期の原理、構成、遅延の詳細な説明

mysqlのマスター/スレーブ同期の原理、構成、遅延の詳細な説明

php是最好的语言
php是最好的语言オリジナル
2018-08-07 16:53:491612ブラウズ

この記事では、MySQL のマスターとスレーブの同期の原理、マスターとスレーブの同期の構成、およびマスターとスレーブの同期の遅延について紹介します。まず、名前が示すように、マスターとスレーブの同期とは何であるかを理解しましょう。マスター/スレーブ レプリケーション。マスターとまったく同じデータベース環境を構築するために使用されます。マスター/スレーブ同期により、あるデータベース サーバーから他のサーバーにデータをコピーして、マスター データベース内のデータとスレーブ データベース内のデータの一貫性を確保できます。

  • クラスターは共有ストレージであり、マスター/スレーブのレプリケーションでは共有がありません。各マシンは独立した完全なシステムであり、何も共有されません。

その原理。マスターとスレーブの同期

  • MySQL 5.6 以降では、マスターとスレーブのレプリケーションを実装する主な方法が 3 つあります。

    1. 完全同期レプリケーション

    3.


  • ロードスレーブの同期図

  • 1. メインデータベースの更新イベント (更新、挿入、削除) がバイナリログに書き込まれるとき

2.メイン ライブラリは、バイナリ ログの更新レコードをスレーブ ライブラリに送信するようにメイン ライブラリに要求します。メイン ライブラリはバイナリ ダンプ スレッドを作成し、バイナリ ログの内容をスレーブ ライブラリに送信します。スレーブ ライブラリの I/O スレッドは、メイン ライブラリの出力スレッドを読み取り、それらの更新をローカルのリレー ログ ファイルにコピーします。


3. このスレッドは、ライブラリから SQL スレッドを作成します。スレーブ ライブラリ I/O スレッドによってリレー ログに書き込まれたイベントを更新し、それらを実行します。

マスターとスレーブの同期の実装 (非同期レプリケーション、異なるサーバー上のデータベース)

1. binary-log を開くようにメイン データベースを構成します

vim /etc/my.cnf

在[mysqld]下添加

server-id=1(用来标识不同的数据库)log-bin=master-bin(打开bin-log并配置文件名为master-bin)log-bin-index=master-bin.index(区分不同的log-bin文件)

データベースを再起動します: systemctl restart mariadb.service

2. リレーログを開くようにスレーブデータベースを設定します

vim /etc/my.cnf

在[mysqld]下添加

server-id=2relay-log=slave-relay-bin(打开relay-log并配置文件名为slave-relay-bin)

relay-log-index=slave-relay-bin.index

データベースを再起動します: systemctl restart mariadb.service

3. メインで 2 つのデータベースを接続しますデータベース: ユーザー repl を作成します。各スレーブ サーバーは、メイン サーバーに接続するためにメイン データベースにアカウント名とパスワードが必要です。

CREATE USER 'repl'@'114.116.77.213' IDENTIFIED BY '12312';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'114.116.77.213' IDENTIFIED BY '12312';

スレーブ データベースで同期を開始します

:

change master to master_host='47.106.78.106',master_user='repl',master_password='12312',master_log_file='master-bin.000001',master_log_pos=0;
: スレーブを開始します;

4. 確認します

マスターデータベースにデータベースを作成し、スレーブデータベースでのマスターとスレーブの同期の役割を確認します

1. データのホットバックアップを実行し、メインデータベースサーバーの後のバックアップデータベースとして機能します。失敗した場合は、データ損失を避けるためにスレーブ データベースに切り替えて作業を続行できます。

2. 読み取りと書き込みを分離することで、データベースはより優れた同時実行性をサポートできます。

マスターとスレーブの同期に関する注意事項

マスター ライブラリはデータの読み取りと書き込みができますが、スレーブ ライブラリはデータの読み取りのみが可能です。これは、スレーブ ライブラリがデータを書き込むときは位置が変更されますが、マスター ライブラリが書き込むときはマスター ライブラリの位置が変更されないため、競合が発生する可能性があります。データの位置が変更されたとき

メインライブラリのバイナリログファイルに大量のデータが保存されている場合、つまり位置が非常に大きい場合、新しいバイナリログファイルが分割され、位置が 0 に設定されます。

マスター ライブラリとスレーブ ライブラリの mysql バージョンは異なっていても構いませんが、スレーブ ライブラリの mysql バージョンがマスター ライブラリのバージョンより高い場合、マスター ライブラリのステートメントは到達時に実行されない可能性があります。スレーブ ライブラリです。
    mysql は下位互換性があるため、はい、つまり、下位バージョンのステートメントは上位バージョンでサポートされますが、上位バージョンの一部のステートメントは下位バージョンではサポートされません。関連
  1. (データベースのマスター/スレーブに関する質問がある場合は、以下の質問をする必要があります):

  2. マスター/スレーブの利点は何ですか?

  3. マスタースレーブの原理とは何ですか?

データベースからの読み取り遅延の問題についてご存知ですか?の解き方?

マスターとスレーブになった後にマスターサーバーがクラッシュした場合はどうすればよいですか?
  1. マスタ・スレーブ同期の遅延の原因
  2. マスタ・スレーブ同期の遅延の原因
  3. マスタ・スレーブの同期遅延問題

  4. 1.マスタースレーブ間の遅延の原因同期

  5. サーバーはクライアントが接続するために N 個のリンクを開くため、大規模な同時更新操作が行われることがわかっていますが、特定の SQL がスレーブ サーバーで実行されるときにサーバーからバイナリログを読み取るスレッドは 1 つだけです。もう少し時間がかかる場合、または特定の SQL でテーブルをロックする必要がある場合、マスター サーバー上に大量の SQL バックログが存在し、スレーブ サーバーに同期されなくなります。これは、マスターとスレーブの不一致、つまりマスターとスレーブの遅延につながります。


    2. マスターとスレーブの同期の遅延に対する解決策

  6. 実際、すべての SQL はスレーブ サーバーで実行する必要があるため、マスターとスレーブの同期の遅延に対するワンストップの解決策はありませんが、マスター サーバーが更新操作を続行すると、書き込みが継続されるため、一度遅延が発生すると遅延が悪化する可能性が高くなります。 もちろん、何らかの緩和策を講じることはできます。

a. マスター サーバーは更新操作を担当するため、sync_binlog=1、innodb_flush_log_at_trx_commit = 1 などの一部の設定は変更できますが、スレーブは変更できません。データのセキュリティを高めるために、sync_binlog を 0 に設定するか、binlog、innodb_flushlog、innodb_flush_log_at_trx_commit を 0 に設定して、SQL の実行効率を大幅に向上させることができます。もう 1 つは、メイン ライブラリよりも優れたハードウェア デバイスをスレーブとして使用することです。

b. クエリを提供せずにスレーブサーバーをバックアップとして使用するだけで、負荷が軽減されると、リレーログ内の SQL の実行効率が自然に高くなります。

c. スレーブサーバーを追加する目的は、読み取り圧力を分散し、サーバーの負荷を軽減することです。

関連する推奨事項:

MYSQL マスター/スレーブ同期の遅延原理の分析と解決策

MYSQL マスター/スレーブ同期の遅延原理

以上がmysqlのマスター/スレーブ同期の原理、構成、遅延の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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