ホームページ  >  記事  >  データベース  >  MySQLデュアルマスターを設定する方法

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

WBOY
WBOY転載
2023-05-26 13:04:313275ブラウズ

    まえがき

    特徴: デュアルマスター構成では、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 サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。