Home  >  Article  >  Database  >  How to configure Mysql dual master

How to configure Mysql dual master

WBOY
WBOYforward
2023-05-26 13:04:313326browse

    Preface

    Features: In a dual-master configuration, the two mysql nodes are each other's master and slave nodes. Node A and node B are each other's master nodes.

    Skip the steps to install mysql

    1. Mysql configuration file

    (1)Node A configuration

    # 设置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)Node B configuration

    Only configurations different from node A are listed

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

    2. Configure node A as the master of node B (master-slave mode)

    Node A is the master and node B is the slave .

    (1) Log in to node A and create an account used by slave (node ​​B).

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

    (2) Check the master information of node A

    As shown in the figure below, the bin_log log of node A is mysql-bin.000001, and the location is 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 ) Log in to node B and set the master of node B to node 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) Confirm whether the slave of node B runs successfully. When both Slave_IO_Running and Slave_SQL_Running are YES in the returned result, it indicates success. If it is NO or Connecting, please check the log file ending with .err in the mysql data directory to find the [ERROR] level log. Usually, initial configuration problems are mainly caused by my.ini configuration or synchronization account creation problems.

    # 在节点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) If the slave configuration is abnormal, you can use the following statement to reset it

    reset slave all;

    3. Complete the dual-master configuration

    At this point, node A has been successfully configured Master-slave mode with node B, that is, node A is the master of node B. Next, repeat the operation of step three, but reverse the operations of nodes A and B, that is, create a synchronization account on node B, view the master information, and set node B as the master on node A. After the configuration is completed, also check the slave status of node A to see if Slave_IO_Running and Slave_SQL_Running are both YES.

    4. Test

    Add or delete schema or table or data in node A, and check whether there is correct synchronization in node B.

    Test whether the added auto-incrementing primary key data on node A and node B matches the configuration file. One is an odd number and one is an even number. When adding or deleting data, will there be a conflict in the primary key?

    5. Control the synchronized library or table

    Achieved by modifying my.ini

    (1) Control on the master side

    binlog-do-db Database for binlog log recording (for multiple databases, separated)

    Binlog-ignore-db Ignore the database in the binlog log (for multiple databases, separated)

    Only the tables recorded in the binlog , can be synchronized to the slave database

    # binlog中记录这两个表
    binlog-do-db=db_1,db_2      
     
    # binlog中不记录这两个表 
    binlog-ignore-db=db_3,db_4

    (2) Control on the slave side

    replicate-do-db Set the database that needs to be replicated
    replicate-ignore-db Settings Replicate database that needs to be ignored
    replicate-do-table Set the table that needs to be replicated
    replicate-ignore-table Set the replicated table that needs to be ignored
    replicate-wild-do-table Same as replication-do-table The function is the same, you can use wildcards
          replicate-wild-ignore-table has the same function as replication-ignore-table, you can add the wildcard  

                                    ’ ’ ’ ’ s ’ s ’ s ’ s ‐ to ‐ ‐‐‐ wild-ignore-table ​ ​There is information, but synchronization is not performed.

    # 执行同步的库
    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. One account with multiple IPs

    When one mysql server serves as the master node and N servers serve as slave nodes, it will be very cumbersome to add an account to each slave node. You can create an account in the master node and associate multiple IP addresses with this account to reduce the number of accounts that need to be added.

    The specific method is to execute the account creation statement multiple times, and the IP will be different each time.

    # 创建一个账号名,为此账号设置多个ip
    grant replication slave on *.* to 'repl_user'@'192.168.5.10' identified by 'slave@100';
    grant replication slave on *.* to 'repl_user'@'192.168.5.20' identified by 'slave@100';
    FLUSH PRIVILEGES

    The above is the detailed content of How to configure Mysql dual master. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete
    Previous article:How to use mysql in ideaNext article:How to use mysql in idea