MySQL5.7.28通过MGR实现主从复制集群

     通过MGR(MySQL Group Replication)实现MySQL主从复制集群的时候,遇到很多问题:1.[GCS] There is no local IP address matching the one configured for the local node 2.[GCS] Connection attempt from IP address 17.31.196.91 refused. Address is not in the IP whitelist

一.    环境:CentOS Linux release 7.7 + MySQL5.7.28

二.    离线安装mysql

  1.  下载安装包:mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz,地址:https://dev.mysql.com/downloads/mysql/
  2. 依次执行下面的命令,执行命令前,还要修改 hosts 文件。
    vi /etc/hosts
    tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
    mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql5728
    mv mysql5728 /usr/local
    cd /usr/local/mysql5728
    vim my.cnf
    # hosts 添加以下内容
    17.31.196.91   MGR-node1
    17.31.196.92   MGR-node2

     

  3. my.cnf 配置内容如下
    [mysql]
    default-character-set=UTF8
    [client]
    port=3307
    default-character-set=UTF8
    [mysqld]
    port=3307
    default-time-zone='+08:00'
    basedir=/usr/local/mysql5728
    datadir=/usr/local/mysql5728/data
    max_connections=2000
    max_connect_errors=10
    character-set-server=UTF8
    default-storage-engine=InnoDB
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    pid-file=/usr/local/mysql5728/mysqld.pid
    log-error=/usr/local/mysql5728/logs/mysqld.log
    
    #复制框架
    server_id=1
    gtid_mode=ON
    enforce_gtid_consistency=ON
    binlog_checksum=NONE
     
    log_bin=binlog
    log_slave_updates=ON
    binlog_format=ROW
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    #组复制设置
    #server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
    transaction_write_set_extraction=XXHASH64
    #告知插件加入或创建组命名,UUID
    loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
    #server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
    loose-group_replication_start_on_boot=off
    #告诉插件使用IP地址,端口24901用于接收组中其他成员转入连接
    loose-group_replication_local_address="17.31.199.48:33061"
    #启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意
    loose-group_replication_group_seeds="17.31.199.48:33061,17.31.199.49:33061"
    loose-group_replication_bootstrap_group=off
    report_host=17.31.199.48
    report_port=3307
    

     

  4. 依次执行以下命令

    mkdir logs
    touch logs/mysqld.log
    cd ..

     

  5. 没有mysql这个组和用户的话就创建

    groupadd mysql
    useradd -g mysql mysql
    #文件夹赋权
    chmod -R +660 mysql5728/
    #更改文件属主和属组
    chown -R mysql:mysql mysql5728/
    chgrp -R mysql mysql5728/
    #--defaults-file指定初始化时用到的配置文件,如果不指定会加载/etc/my.cnf,如果/etc/my.cnf不存在
    #会加载默认配置
    ./bin/mysqld --defaults-file=/usr/local/mysql5728/my.cnf --initialize --user=root -- 
      basedir=/usr/local/mysql5728

     

  6. 初始化后,会生成data文件夹

    chmod -R +660 data/
    chown -R mysql:mysql data/
    chgrp -R mysql data/

     

  7. 因为服务器已经部署了一个mysql,所以使用下面的方式启动

    ./mysqld_safe --defaults-file=/usr/local/mysql5728/my.cnf &

     

  8. 进入mysql客户端

    #获取mysql初始密码
    cat logs/mysqld.log | grep 'A temporary'
    #进入客户端
    ./bin/mysql -u root -p

     

  9. 组复制操作命令

    # 关闭binlog日志,经确认,binlog不是在start group_replication之后开始生成,而是在mysql服务启动的 
    # 时候,因为my.cnf里面配置了复制框架,在修改或添加用户的时候一定要设为0,关闭binlog,让修改或添加用 
    # 户的sql不计入binlog,这样从机也就不会执行到相关sql语句,因为binlog没有相关sql,那么从机的 
    # relaylog也不会有,不然从机在start group_replication的时候,会遇到事务执行中断的错误
    SET SQL_LOG_BIN=0;
    set password='root';
    # 让所有IP都可以访问
    update mysql.user set host='%' where user='root';
    grant all on *.* to 'root'@'%';
    FLUSH PRIVILEGES;
    # 创建组复制用户
    CREATE USER repl@'%' IDENTIFIED BY 'repl';
    GRANT REPLICATION SLAVE ON *.* TO repl@'%';
    FLUSH PRIVILEGES;
    
    SET SQL_LOG_BIN=1;
    CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 
      'group_replication_recovery';
    INSTALL PLUGIN group_replication SONAME 'group_replication.so';

     

  10. 创建MGR主机,在START GROUP_REPLICATION时失败,查看日志:[GCS] There is no local IP address matching the one configured for the local node (17.31.199.48:33061),原因:在开启组复制的时候,会查询本机可用的前12个IP(mysql官网有说明,地址https://bugs.mysql.com/bug.php?id=86772),想到17.31.199.48是路由器映射的IP,不是服务器的本地IP,可通过Linux命令 ifconfig 查看

    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;

     

  11. 更改my.cnf里面的 loose-group_replication_local_address、loose-group_replication_group_seeds、report_host 如下

    loose-group_replication_local_address="17.31.196.91:33061"
    loose-group_replication_group_seeds="17.31.196.91:33061,17.31.196.92:33061"
    report_host=17.31.196.91

     

  12. 重启mysql服务,进入mysql客户端,并创建MGR主机,在START GROUP_REPLICATION时失败,查看日志:[GCS] Connection attempt from IP address 17.31.196.91 refused. Address is not in the IP whitelist。原因:没有设置组复制白名单。

    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;

     

  13. 更改my.cnf,在里面的组复制相关设置中添加白名单

    loose-group_replication_ip_whitelist='17.31.196.91/24,17.31.196.92/24,127.0.0.1/8'

     

  14. 重启mysql服务,进入mysql客户端,并创建MGR主机

    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;
    SELECT * FROM performance_schema.replication_group_members;

     

  15. 从服务器也按以上步骤创建mysql,要更改 my.cnf 的以下内容

    server_id=2
    loose-group_replication_local_address="17.31.196.92:33061"
    loose-group_replication_group_seeds="17.31.196.91:33061,17.31.196.92:33061"
    report_host=17.31.196.92

     

  16. 创建MGR从机

    set global group_replication_allow_local_disjoint_gtids_join=ON;
    START GROUP_REPLICATION;
    SELECT * FROM performance_schema.replication_group_members;

     

  17. 如果查看到的 slave 状态一直是 recovring,则说明出了问题,查看MySQL报错日志,relaylog 回放失败,解决如下

    STOP GROUP_REPLICATION;
    # Master_Log_File 主机binlog,Master_Log_Pos 执行错误点
    change master to Master_Log_File='binlog.000004', Master_Log_Pos=394186;
    START GROUP_REPLICATION;
    SELECT * FROM performance_schema.replication_group_members;

     

  18. 关于 change master to 的详细说明请参见:https://blog.csdn.net/weixin_34408624/article/details/89773292

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的组复制(MGR)是MySQL数据库的一种高可用性技术。它是一个MySQL服务器插件,可以创建具有弹性、高可用性和容错的复制拓扑。组复制支持一主多从、多级主从、互为主从、多主多从等主从架构模式。常见的MySQL集群方案包括MMM、MHA和MGRMySQL组复制基于常规的MySQL复制,并利用了基于行格式的二进制日志和GTID等特性。它的整体框架图包括多个组件,如组成员、组管理器、组通信引擎等。具体的组复制原理和实现细节可以参考相关文档和资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [死磕数据库系列(二十五):MySQL 高可用之组复制(MGR)详解](https://blog.csdn.net/mingongge/article/details/129457231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [MySQL高可用和主从同步](https://blog.csdn.net/qq_42290561/article/details/126025091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值