数据库集群系列(四):MySQL 5.7结合GTID搭建双主模式-双Master模式集群【测试成功】

2024年 7月 8日 80.0k 0

一、需求背景

    俩台数据库服务器需要实时互相进行同步数据。

    Master 1:192.168.1.137

   Master 2:192.168.1.138

二、技术特点

优点:

- 负载均衡:通过将请求分摊到多个主节点上,可以实现负载均衡,提高数据库的性能和可用性。

- 高可用性:如果一个主节点发生故障,其他主节点可以接管其工作负载,确保数据库的持续可用性。

- 可扩展性:可以根据业务需求添加或删除主节点,从而实现数据库的弹性扩展。

- 读写分离:可以通过将读写操作分摊到不同的主节点上,实现读写分离,进一步提高数据库的性能。

缺点:

- 数据一致性:由于存在多个主节点,可能会导致数据不一致的情况。

- 复杂性:多主节点集群的配置和管理更为复杂,需要更专业的运维人员。

- 成本:多主节点集群的成本更高,需要更多的硬件和软件资源。

三、Master-1配置

1、修改my.cnf配置文件

    [mysqld]
    server_id = 137
    log-bin=mysql-bin
    port = 3306
    auto_increment_increment=2
    auto_increment_offset=1
    gtid_mode = on
    enforce-gtid-consistency=true

    解释:

    1. server_id = 137
      : 为 MySQL 服务器设置一个唯一的标识符,通常在复制拓扑结构中使用。每个在复制设置中的服务器都应该有一个独特的 server_id
      以区分彼此,通常是IP地址后3位。

    2. log-bin=mysql-bin
      : 这个设置启用了二进制日志,mysql-bin
      是二进制日志文件的基本名称。二进制日志用于复制和时间点恢复。

    3. auto_increment_increment=2
      : 在多主复制设置中,此设置确定连续的
      表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535,AUTO_INCREMENT 值之间的增量。在这种情况下,复制设置中的每个其他服务器将为自动增量列使用奇数或偶数值。

    4. auto_increment_offset=1
      : 在多主复制设置中,此设置为 AUTO_INCREMENT
      值提供了一个偏移量。它有助于避免不同服务器之间的自动增量值冲突。# 表示自增长字段从那个数开始,他的取值范围是1 .. 65535,另外一台服务器的offset为2,防止生成的主键冲突。

    5. gtid_mode = on
      : 启用全局事务标识符(GTID)模式。GTID 是用于标识事务的唯一标识符,使得更容易跟踪和管理复制。

    6. enforce-gtid-consistency=true
      : 当设置为 true 时,它强制执行 GTID 一致性,确保所有事务都使用 GTID 进行复制。这有助于在复制方案中维护数据一致性。

    2、重启MySQL服务

    3、建立主从关系(Master-2也修改配置重启后再执行)

            mysql -uroot -p123456

            flush logs;

            reset master;

        change master to

        master_host='192.168.1.138',

        master_port=3306,

        master_user='sync',

        master_password='Yl2023..',

        master_auto_position = 1;

      mysql> flush logs;
      Query OK, 0 rows affected (0.01 sec)


      mysql> reset master;
      Query OK, 0 rows affected (0.00 sec)


      mysql> change master to
      -> master_host='192.168.1.138',
      -> master_port=3306,
      -> master_user='sync',
      -> master_password='Yl2023..',
      -> master_auto_position = 1;
      Query OK, 0 rows affected, 2 warnings (0.01 sec)

       4、开启同步复制并验证(Master-2也修改配置重启后再执行)

          START SLAVE;

          show slave status \G;

        mysql> START SLAVE;
        Query OK, 0 rows affected (0.01 sec)
        mysql> show slave status \G
        *************************** 1. row ***************************
        Slave_IO_State: Waiting for master to send event
        Master_Host: 192.168.1.138
        Master_User: sync
        Master_Port: 3306
        Connect_Retry: 60
        Master_Log_File: mysql-bin.000001
        Read_Master_Log_Pos: 154
        Relay_Log_File: DB-Master-relay-bin.000002
        Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000001
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

        数据库集群系列(四):MySQL 5.7结合GTID搭建双主模式-双Master模式集群【测试成功】-1

        三、Master-2配置

          1、修改my.cnf配置文件

          server_id = 138
          log-bin=mysql-bin
          auto_increment_increment=2
          # 生成主键从2开始
          auto_increment_offset=2
          gtid_mode = on
          enforce-gtid-consistency=true

             2、重启MySQL服务

            3、建立主从关系(Master-2也修改配置重启后再执行)

            mysql> flush logs;
            Query OK, 0 rows affected (0.00 sec)


            mysql> reset master;
            Query OK, 0 rows affected (0.01 sec)


            mysql> change master to
            -> master_host='192.168.1.137',
            -> master_port=3306,
            -> master_user='sync',
            -> master_password='Yl2023..',
            -> master_auto_position = 1;
            ERROR 3081 (HY000): This operation cannot be performed with running replication threads; run STOP SLAVE FOR CHANNEL '' first
            mysql> stop slave;
            Query OK, 0 rows affected (0.00 sec)


            mysql> change master to
            -> master_host='192.168.1.137',
            -> master_port=3306,
            -> master_user='sync',
            -> master_password='Yl2023..',
            -> master_auto_position = 1;
            Query OK, 0 rows affected, 2 warnings (0.00 sec)

            备注:如果之前已开启了复制,则需要先stop再change master。

              4、开启同步复制并验证(Master-2也修改配置重启后再执行)

              mysql> START SLAVE;
              Query OK, 0 rows affected (0.00 sec)


              mysql> show slave status \G
              *************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.1.137
              Master_User: sync
              Master_Port: 3306
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 154
              Relay_Log_File: DB-Node1-relay-bin.000002
              Relay_Log_Pos: 367
              Relay_Master_Log_File: mysql-bin.000001
              Slave_IO_Running: Yes
              Slave_SQL_Running: Yes
              Replicate_Do_DB:
              Replicate_Ignore_DB:
              Replicate_Do_Table:
              Replicate_Ignore_Table:
              Replicate_Wild_Do_Table:
              Replicate_Wild_Ignore_Table:
              Last_Errno: 0
              Last_Error:
              Skip_Counter: 0
              Exec_Master_Log_Pos: 154
              Relay_Log_Space: 577
              Until_Condition: None
              Until_Log_File:
              Until_Log_Pos: 0
              Master_SSL_Allowed: No
              Master_SSL_CA_File:
              Master_SSL_CA_Path:
              Master_SSL_Cert:
              Master_SSL_Cipher:
              Master_SSL_Key:
              Seconds_Behind_Master: 0
              Master_SSL_Verify_Server_Cert: No
              Last_IO_Errno: 0
              Last_IO_Error:
              Last_SQL_Errno: 0
              Last_SQL_Error:
              Replicate_Ignore_Server_Ids:
              Master_Server_Id: 137
              Master_UUID: 4442baa3-a073-11ee-bea9-000c29b1eab0
              Master_Info_File: /var/lib/mysql/master.info
              SQL_Delay: 0
              SQL_Remaining_Delay: NULL
              Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Master_Retry_Count: 86400
              Master_Bind:
              Last_IO_Error_Timestamp:
              Last_SQL_Error_Timestamp:
              Master_SSL_Crl:
              Master_SSL_Crlpath:
              Retrieved_Gtid_Set:
              Executed_Gtid_Set:
              Auto_Position: 1
              Replicate_Rewrite_DB:
              Channel_Name:
              Master_TLS_Version:
              1 row in set (0.00 sec)

              四、数据插入修改测试

              1、在master2节点随机插入数据表及测试数据

                -- 创建名为 test 的数据表
                CREATE TABLE test (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(50),
                age INT,
                email VARCHAR(50)
                );


                -- 插入随机数据
                INSERT INTO test (name, age, email)
                SELECT
                CONCAT('User', LPAD(FLOOR(RAND() * 1000), 3, '0')),
                FLOOR(RAND() * 50) + 20,
                CONCAT('user', FLOOR(RAND() * 1000), '@example.com')
                FROM
                INFORMATION_SCHEMA.COLUMNS LIMIT 10;

                数据库集群系列(四):MySQL 5.7结合GTID搭建双主模式-双Master模式集群【测试成功】-2

                数据库集群系列(四):MySQL 5.7结合GTID搭建双主模式-双Master模式集群【测试成功】-3

                2、在master1里随机删除2-10条数据,随机进行修改,发现可以实时进行更新。

                MySQL数据库双Master模式配置完成。

                数据库集群系列(四):MySQL 5.7结合GTID搭建双主模式-双Master模式集群【测试成功】-4

                相关文章

                Oracle如何使用授予和撤销权限的语法和示例
                Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
                下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
                社区版oceanbase安装
                Oracle 导出CSV工具-sqluldr2
                ETL数据集成丨快速将MySQL数据迁移至Doris数据库

                发布评论