目次
まえがき
1. Mysql 構成ファイル
(1)ノード A 構成
(2)ノード B 構成
2. ノード A をノード B のマスターとして構成します (マスター/スレーブ モード)
3. この時点でデュアルマスター構成を完了します
4. テスト
5. 同期ライブラリまたはテーブルの制御
ホームページ データベース mysql チュートリアル MySQLデュアルマスターを設定する方法

MySQLデュアルマスターを設定する方法

May 26, 2023 pm 01:04 PM
mysql

    まえがき

    特徴: デュアルマスター構成では、2 つの mysql ノードが互いのマスター ノードとスレーブ ノードになります。ノード A とノード B はお互いのマスター ノードです。

    mysql をインストールする手順をスキップします

    1. Mysql 構成ファイル

    (1)ノード A 構成

    # 设置server-id,两节点必须不一样
    server-id = 100
     
     
    # 开启bin_log,模式为ROW,允许最大日志为1G
    log_bin = mysql-bin
    binlog_format = ROW
    max_binlog_size = 1024M
     
     
    # mysql5.7的版本不需要配置log-slave-updates=1
    # log-slave-updates = 1
     
     
    # 实现数据库宕机恢复后,自动同步缺少的数据
    relay_log = mysql-relay-bin
     
     
    # 设置自增ID初始值为2,每次自增量为2。即都是偶数2,4,6,8,...
    auto_increment_offset = 2
    auto_increment_increment = 2
     
     
    # 开启gtid
    gtid_mode = ON
    enforce_gtid_consistency = 1
     
     
    # 忽略不需要同步的schema
    replicate-ignore-db = mysql
    replicate-ignore-db = information_schema
    replicate-ignore-db = performance_schema
    replicate-ignore-db = sys
    ログイン後にコピー

    (2)ノード B 構成

    ノード A と異なる構成のみがリストされています

    # 设置server-id,两节点必须不一样
    server-id = 200
     
    # 设置自增ID初始值为1,每次自增量为2。即都是奇数1,3,5,7,...
    auto_increment_offset = 1
    auto_increment_increment = 2
    ログイン後にコピー

    2. ノード A をノード B のマスターとして構成します (マスター/スレーブ モード)

    ノード A がマスターであり、ノード B ですは奴隷です。

    (1) ノードAにログインし、スレーブ(ノードB)で使用するアカウントを作成します。

    # 在节点A上创建账号repl_user,允许从任意IP访问,密码为slave@100,
    grant replication slave on *.* to 'repl_user'@'%' identified by 'slave@100';
    flush privileges;
    ログイン後にコピー

    (2) ノードAのマスター情報を確認します

    下図に示すように、ノードAのbin_logログはmysql-bin.000001で、場所は154

    です。
    # 清空master信息。初次配置可以使用,若已运行了同步,切记不要使用!
    reset master;
     
    # 查看master信息
    show master status;
     
    +------------------+----------+--------------+------------------+---------------------------------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
    +------------------+----------+--------------+------------------+---------------------------------------------+
    | mysql-bin.000001 |     154 |              |                  | c2cf218e-2317-11ec-a36f-5cf9dd4fd6a8:1-5    |
    +------------------+----------+--------------+------------------+---------------------------------------------+
    ログイン後にコピー

    (3) ノードBにログインし、ノードBのマスタをノードA

    # 停止节点B上的slave
    stop slave;
     
    # 将节点B的master设为节点A,以下的配置信息均表示节点A
    # MASTER_LOG_FILE和MASTER_LOG_POS,是在第(2)步中查看节点A的master信息
    CHANGE MASTER TO 
           MASTER_HOST='127.0.0.1', 
           MASTER_PORT=3307,
           MASTER_USER='repl_user', 
           MASTER_PASSWORD='slave@100', 
           MASTER_LOG_FILE='mysql-bin.000001', 
           MASTER_LOG_POS=154;
     
    # 开启节点B上的slave
    start slave;
    ログイン後にコピー

    に設定します。 (4) ノードBのスレーブが正常に動作するか確認します。返された結果で Slave_IO_Running と Slave_SQL_Running の両方が YES の場合、成功を示します。 「NO」または「接続中」の場合は、mysql データ ディレクトリ内の .err で終わるログ ファイルを確認して、[ERROR] レベルのログを見つけてください。通常、初期構成の問題は、主に my.ini 構成または同期アカウントの作成の問題によって発生します。

    # 在节点B中查看slave状态
    show slave status\G;
     
    *************************** 1. row ***************************
                  Slave_IO_State: Waiting for master to send event
                      Master_Host: 127.0.0.1
                      Master_User: repl_user
                      Master_Port: 3307
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 2207
                   Relay_Log_File: mysql-relay-bin.000002
                    Relay_Log_Pos: 1143
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                               ......
    ログイン後にコピー

    (5) スレーブ構成が異常な場合は、次のステートメントを使用してリセットできます

    reset slave all;
    ログイン後にコピー

    3. この時点でデュアルマスター構成を完了します

    、ノード A はノード B とのマスター/スレーブ モードを正常に構成しました。つまり、ノード A はノード B のマスターになります。次に、ステップ 3 の操作を繰り返しますが、ノード A と B の操作を逆にします。つまり、ノード B で同期アカウントを作成し、マスター情報を表示し、ノード B をノード A のマスターとして設定します。構成が完了したら、ノード A のスレーブ ステータスもチェックして、Slave_IO_Running と Slave_SQL_Running が両方とも YES であるかどうかを確認します。

    4. テスト

    ノード A でスキーマ、テーブル、データを追加または削除し、ノード B で適切な同期が行われているかどうかを確認します。

    ノード A とノード B に追加された自動インクリメント主キー データが構成ファイルと一致するかどうかをテストします。 1 つは奇数、もう 1 つは偶数です。データを追加または削除するときに、主キーに競合が発生しますか?

    5. 同期ライブラリまたはテーブルの制御

    my.iniの変更で実現

    (1) マスター側の制御

    binlog-do- db binlog ログ記録用データベース (複数のデータベースの場合、分離)

    Binlog-ignore-db binlog ログ内のデータベースを無視します (複数のデータベースの場合、分離)

    binlog ログに記録されたテーブルのみbinlog 、スレーブデータベースと同期可能

    # binlog中记录这两个表
    binlog-do-db=db_1,db_2      
     
    # binlog中不记录这两个表 
    binlog-ignore-db=db_3,db_4
    ログイン後にコピー

    (2)スレーブ側の制御

    replicate-do-db レプリケーションが必要なデータベースを設定
    replicate -ignore-db 設定 無視する必要があるデータベースをレプリケートします
    replicate-do-table レプリケートする必要があるテーブルを設定します
    replicate-ignore-table 無視する必要があるレプリケート テーブルを設定します
    replicate- wild-do-table replication-do-table と同じ 機能は同じです。ワイルドカードを使用できます。

    # ' ' ' s ' s ' s ' s ‐to ‐ ‐‐‐ wild-ignore-table 情報はありますが、同期は行われません。

    # 执行同步的库
    replicate-do-db=db_1
    replicate-do-db=db_2
     
    # 忽略同步的库
    replicate-ignore-db=db_3
     
    # 执行同步的表
    replicate-do-table=db_1.table_a
    replicate-do-table=db_2.table_b
     
    # 忽略同步的表
    replicate-ignore-table=db_2.table_c
     
    # 只复制哪个库的哪个表
    replicate-wild-do-table=db_4.% 
     
    # 忽略哪个库的哪个表
    replicate-wild-ignore-table=mysql.%
    ログイン後にコピー
    6. 複数の IP を持つ 1 つのアカウント

    1 台の mysql サーバーがマスター ノードとして機能し、N 台のサーバーがスレーブ ノードとして機能する場合、各スレーブ ノードにアカウントを追加するのは非常に面倒になります。 。マスター ノードでアカウントを作成し、複数の IP アドレスをこのアカウントに関連付けることで、追加する必要があるアカウントの数を減らすことができます。

    具体的な方法は、アカウント作成ステートメントを複数回実行することで、毎回 IP が異なります。

    rree

    以上がMySQLデュアルマスターを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

    ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

    PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

    MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

    PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

    PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

    PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

    MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

    PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

    PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

    MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

    MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

    PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

    PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

    Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

    Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

    See all articles