ホームページ >データベース >mysql チュートリアル >MySQL でデータのレプリケーションと同期を実現するにはどうすればよいですか?

MySQL でデータのレプリケーションと同期を実現するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-07-29 08:24:402624ブラウズ

MySQL は現在最も人気のあるリレーショナル データベース管理システムの 1 つであり、高可用性とデータ保護を実現するデータのレプリケーションと同期をサポートしています。この記事では、MySQL でデータのレプリケーションと同期を実装する方法を紹介し、いくつかのコード例を示します。

1. MySQL データ レプリケーションの基本原則
MySQL データ レプリケーションは、あるデータベースから別のデータベースにデータをコピーすることによって実現されます。これはマスター/スレーブ レプリケーション モデルに基づいており、1 つのデータベースがマスター サーバーとして機能し、すべての書き込み操作の受信と処理を担当し、他のデータベースがスレーブ サーバーとして機能し、マスター サーバーからのデータ更新の要求と取得を担当します。データのレプリケーションは、マスター サーバー上のバイナリ ログをスレーブ サーバーに転送することによって実行されます。

  1. メイン サーバーの設定
    まず、メイン サーバーでバイナリ ログ機能を有効にする必要があります。次の内容を my.cnf 構成ファイルに追加します:

[mysqld]
server-id=1
log-bin=mysql-bin

ここで、 server -id はマスターサーバーの一意の識別子で、log-bin はバイナリログファイルの名前を指定します。

次に、MySQL サービスを再起動して、構成を有効にします。

  1. スレーブ サーバーの構成
    次に、スレーブ サーバーでレプリケーションを構成する必要があります。次の内容を my.cnf 構成ファイルに追加します:

[mysqld]
server-id=2
relay-log=mysql-relay-bin
log-slave - update=1

このうち、server-id はスレーブ サーバーの一意の識別子、relay-log はリレー ログ ファイルの名前を指定し、log-slave-updates はスレーブ サーバーがバイナリを記録するかどうかを示します。ログ。

次に、MySQL サービスを再起動して、構成を有効にします。

  1. レプリケーション チャネルを確立する
    メイン サーバー上でレプリケーション専用のユーザーを作成し、それを承認します:

CREATE USER 'replication'@'% ' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON . TO 'replication'@'%';

次に、バイナリ ログ ファイルの名前と場所を取得します:

SHOW MASTER STATUS;

スレーブ サーバーで次のコマンドを実行してレプリケーション チャネルを確立します:

CHANGE MASTER TO MASTER_HOST='メイン サーバー IP', MASTER_USER='replication ', MASTER_PASSWORD='パスワード', MASTER_LOG_FILE='バイナリ ログ ファイル名', MASTER_LOG_POS=position;

次に、サーバーからレプリケーション機能を開始します:

START SLAVE;

2. 方法MySQL データ同期を実装するには
MySQL データ同期とは、複数のデータベース間でデータの一貫性を維持し、データのリアルタイム性と一貫性を確保することを指します。以下に、いくつかの一般的なデータ同期実装方法を紹介します。

  1. binlog に基づくデータ同期
    MySQL のバイナリ ログには、データベースのすべての書き込み操作が記録されており、バイナリ ログを使用してデータ同期を実現できます。具体的な手順は次のとおりです。

(1) メイン サーバーでバイナリ ログ機能を有効にし、バイナリ ログ形式を ROW に設定します。

binlog_format=ROW

(2) セカンダリ サーバーでレプリケーションを構成し、CHANGE MASTER コマンドを使用してレプリケーション チャネルを確立し、レプリケーションを開始します。

(3) マスター サーバー上のデータが変更されたときにデータを同期するためのトリガーをスレーブ サーバー上に作成します。

DELIMITER $$
CREATE TRIGGER sync_data AFTER INSERT ON table name FOR EACH ROW
BEGIN
INSERT INTO table name VALUES (NEW.Field 1, NEW.Field 2, ...) ;
END$$
DELIMITER ;

マスター サーバー上のデータが変更されると、トリガーはスレーブ サーバー上で対応する INSERT 操作を実行し、データ同期を実現します。

  1. 主キーの自動インクリメント列に基づくデータ同期
    複数のデータベース間でデータを同期する場合、主キーの競合がよく発生します。解決策の 1 つは、主キーの自動インクリメント列を使用して、異なるデータベース間で主キーが重複しないようにすることです。

具体的な手順は次のとおりです。

(1) 各データベースにテーブルを作成するときに、主キー フィールドを自動インクリメント列に設定します。

(2) 各データベースにデータを挿入するときに、主キー フィールドの値を指定する必要はありません。データベースは、そのフィールドに対して一意の主キー値を自動的に生成します。

(3) スケジュールされたタスクまたはトリガーを通じて、各データベースのデータを他のデータベースと同期します。

コード例:

CREATE TABLE テーブル名 (
id ​​INT AUTO_INCREMENT PRIMARY KEY,
フィールド 1 VARCHAR(50),
フィールド 2 VARCHAR(50)
);

INSERT INTO テーブル名 (フィールド 1, フィールド 2) VALUES ('データ 1', 'データ 2');

  1. ツールベースのデータ同期
    binlog および主キー自動インクリメント列に基づくデータ同期方法に加えて、Maxwell や Debezium など、MySQL データ同期を実現できるサードパーティ ツールもいくつかあります。これらのツールは、データベースのバイナリ ログを解析し、読み取り可能な形式に変換してデータの同期を実現します。

コード例はまだありません。ツールの公式ドキュメントと使用例を参照してください。

概要:
この記事では、MySQL でデータのレプリケーションと同期を実現する方法と、関連するコード例を紹介します。データの複製と同期を通じて、データベースの高可用性とデータ保護を実現し、システムの安定性と信頼性を向上させることができます。同時に、実際のニーズに基づいて適切な方法とツールを選択することで、ビジネス ニーズをより適切に満たすことができます。

以上がMySQL でデータのレプリケーションと同期を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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