• MySQL5.7主从,单slave多master



    本次实验将使用MySQL 5.6.x作为多“主”。

    〇 测试环境:
    OS:CentOS 6.5
    master_1: 192.168.1.185(MySQL 5.6.30)
    master_2: 192.168.1.186(MySQL 5.6.30)
    slave: 192.168.1.1.187(MySQL 5.7.15)

    〇 配置:
    master_1相关配置:

    1. [mysqld]
    2. server_id    = 185
    3. log-bin      = master_1
    4. log-bin-index    = master_1.index


    master_2相关配置:

    1. [mysqld]
    2. server_id    = 186
    3. log-bin      = master_2
    4. log-bin-index    = master_2.index

    slave相关配置:

    1. [mysqld]
    2. server_id    = 187
    3. relay-log    = slave
    4. relay-log-index           = slave.index
    5. # 多源复制结构中的slave,官方要求master-info和relay-log-info存放处必须为TABLE.
    6. # 如果为FILE,则在添加多个master时,会失败:ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY.
    7. master-info-repository    = TABLE
    8. relay-log-info-repository = TABLE

    〇 为master_1 & master_2上建立复制用户:

    1. GRANT REPLICATION SLAVE ON *.* to repl@'192.168.1.187' IDENTIFIED BY 'repl';
    2. FLUSH PRIVILEGES;

    〇 测试数据准备:
    master_1测试数据:

    1. master_1> FLUSH LOGS;
    2. Query OK, 0 rows affected (0.00 sec)
    3. master_1> SHOW BINARY LOGS; -- 记住当前binlog的name和position
    4. +-----------------+-----------+
    5. | Log_name        | File_size |
    6. +-----------------+-----------+
    7. | master_1.000001 | 166       |
    8. | master_1.000002 | 455       |
    9. | master_1.000003 | 120       |
    10. +-----------------+-----------+
    11. 3 rows in set (0.00 sec)
    12. master_1> CREATE DATABASE master_1;
    13. Query OK, 1 row affected (0.03 sec)

    master_2测试数据:

    1. master_2> FLUSH LOGS;
    2. Query OK, 0 rows affected (0.00 sec)
    3. master_2> SHOW BINARY LOGS;    -- 记住当前binlog的name和position
    4. +-----------------+-----------+
    5. | Log_name       | File_size |
    6. +-----------------+-----------+
    7. | master_2.000001 | 166       |
    8. | master_2.000002 | 455       |
    9. | master_2.000003 | 120       |
    10. +-----------------+-----------+
    11. 3 rows in set (0.00 sec)
    12. master_2> CREATE DATABASE master_2;
    13. Query OK, 1 row affected (0.02 sec)

    〇 在slave上执行:

    1. salve> CHANGE MASTER TO 
    2.     -> MASTER_HOST='192.168.1.185',
    3.     -> MASTER_USER='repl',
    4.     -> MASTER_PORT=3306,
    5.     -> MASTER_PASSWORD='repl',
    6.     -> MASTER_LOG_FILE='master_1.000003',
    7.     -> MASTER_LOG_POS=120
    8.     -> FOR CHANNEL 'master_1';
    9. Query OK, 0 rows affected, 2 warnings (0.02 sec)    -- 此处产生的warnings是一些安全建议和警告,本实验无视。
    10. salve> CHANGE MASTER TO
    11.     -> MASTER_HOST='192.168.1.186',
    12.     -> MASTER_USER='repl',
    13.     -> MASTER_PORT=3306,
    14.     -> MASTER_PASSWORD='repl',
    15.     -> MASTER_LOG_FILE='master_2.000003',
    16.     -> MASTER_LOG_POS=120
    17.     -> FOR CHANNEL 'master_2';
    18. Query OK, 0 rows affected, 2 warnings (0.02 sec)
    19. slave> START SLAVE;
    20. Query OK, 0 rows affected (0.01 sec)
    21. salve> SHOW DATABASES;    -- 此时在master_1和master_2上的binlog events已经被正常的apply了
    22. +--------------------+
    23. | Database            |
    24. +--------------------+
    25. | information_schema |
    26. | master_1           |
    27. | master_2           |
    28. | mysql             |
    29. | performance_schema |
    30. | sys                |
    31. +--------------------+
    32. 6 rows in set (0.00 sec)

    最后通过start slave status即可查到复制状态

    1. slave> SHOW SLAVE STATUSG
    2. *************************** 1. row ***************************
    3.                Slave_IO_State: Waiting for master to send event
    4.                   Master_Host: 192.168.1.185
    5.                   Master_User: repl
    6.                   Master_Port: 3306
    7.                 ……………………………………………………
    8.              Slave_IO_Running: Yes
    9.             Slave_SQL_Running: Yes
    10.                 ……………………………………………………
    11.              Master_Server_Id: 185
    12.                   Master_UUID: ee1f8704-58c4-11e6-95b5-000c297f23b7
    13.              Master_Info_File: mysql.slave_master_info
    14.                     SQL_Delay: 0
    15.           SQL_Remaining_Delay: NULL
    16.       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
    17.                ……………………………………………………
    18.                  Channel_Name: master_1
    19.            Master_TLS_Version:
    20. *************************** 2. row ***************************
    21.                Slave_IO_State: Waiting for master to send event
    22.                   Master_Host: 192.168.1.186
    23.                   Master_User: repl
    24.                   Master_Port: 3306
    25.                 Connect_Retry: 60
    26.                ……………………………………………………
    27.              Slave_IO_Running: Yes
    28.             Slave_SQL_Running: Yes
    29.                ……………………………………………………
    30.              Master_Server_Id: 186
    31.                   Master_UUID: 53774f2d-7e14-11e6-8900-000c298e914c
    32.              Master_Info_File: mysql.slave_master_info
    33.                     SQL_Delay: 0
    34.           SQL_Remaining_Delay: NULL
    35.       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
    36.                ……………………………………………………
    37.                  Channel_Name: master_2
    38.            Master_TLS_Version:
    39. 2 rows in set (0.00 sec)

    〇 测试:
    master_1上操作:

    1. master_1> CREATE TABLE master_1.test_table(id int);
    2. Query OK, 0 rows affected (0.05 sec)
    3. master_1> INSERT INTO master_1.test_table SELECT 666666;
    4. Query OK, 1 row affected (0.01 sec)
    5. Records: 1 Duplicates: 0 Warnings: 0

    master_2上操作:

    1. master_2> CREATE TABLE master_2.test_table(massage varchar(16));
    2. Query OK, 0 rows affected (0.02 sec)
    3. master_2> INSERT INTO master_2.test_table SELECT '嘿嘿嘿';
    4. Query OK, 1 row affected (0.00 sec)
    5. Records: 1 Duplicates: 0 Warnings: 0
    6. master_2> INSERT INTO master_2.test_table SELECT '三阳之炎';
    7. Query OK, 1 row affected (0.00 sec)
    8. Records: 1 Duplicates: 0 Warnings: 0

    slave上操作:

    1. salve> SELECT id FROM master_1.test_table;
    2. +--------+
    3. | id     |
    4. +--------+
    5. | 666666 |
    6. +--------+
    7. 1 row in set (0.00 sec)
    8. salve> SELECT massage FROM master_2.test_table;
    9. +--------------+
    10. | massage      |
    11. +--------------+
    12. | 嘿嘿嘿        |
    13. | 三阳之炎      |
    14. +--------------+
    15. 2 rows in set (0.00 sec)

     删除某个slave 

    先停掉,再reset即可

    stop slave  for channel 'master_8'; 

    reset slave all for channel 'master_8';  

    〇 其他相关语法:

    1. START/STOP/RESET ALL/RESET SLAVE FOR CHANNEL 'XXX';
    2.  
    3. SHOW SLAVE STATUS FOR CHANNEL 'XXX';

    ps.
    与上述传统position方式类似,GTID方式配置起来也类似,开启GTID后,需要注意使用FOR CHANNEL 'xxx'关键字即可,比如:

    1. CHANGE MASTER TO 
    2.     MASTER_HOST='',
    3.     MASTER_USER='repl',
    4.     MASTER_PORT=3306,
    5.     MASTER_PASSWORD='repl',
    6.     MASTER_AUTO_POSITION = 1
    7.     FOR CHANNEL 'master_1';


    多台主机的schema名字不可以一样,(比如master_1为db_00 ... db_09共10库,master_2为db_10 ... db_19,master_3为db_20 ... db_29 ……)

  • 相关阅读:
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/xkcp008/p/9431787.html
Copyright © 2020-2023  润新知