MyCat2搭建Mysql一主二从读写分离最佳实践

MyCat2搭建Mysql一主二从读写分离最佳实践

1.环境准备

  • 三台配备mysql数据库环境的Centos7.6虚拟机(master01(主机),slave01(从机01),slave02(从机02))。
  • 关闭所有虚拟机的防火墙,防止搭建过程出现不必要的问题。

2.安装Mycat2

Mycat2下载链接

  • 通过工具将mycat文件目录上传至主机服务器(master01)/opt目录
    在这里插入图片描述

  • 进入/opt/mycat/bin目录,将红框文件权限修改为777最高权限

    在这里插入图片描述
    在这里插入图片描述

  • 在主机(master01)数据库新建一个库用于mycat登录物理映射的原型库(我这里新建库为dev)

  • 修改mycat的prototype的配置

    #进入mycat配置数据源目录
    cd /opt/mycat/conf/datasources
    #修改配置文件
    vim prototypeDs.datasource.json
    

    在这里插入图片描述

    将图中红框内容修改为自己的信息即可。

    启动mycat之前需要确认prototype数据源所对应的mysql数据库配置,修改对应的user(用户),password(密码),url中的ip

  • 启动mycat

    #进入mycat bin目录
    cd /opt/mycat/bin
    #启动
    ./mycat start
    #查看状态
    ./mycat status
    #停止
    ./mycat stop
    #前台运行,可查看运行日志
    ./mycat console
    #重启服务
    ./mycat restart
    #暂停
    ./mycat pause
    

    在这里插入图片描述

  • 使用远程工具连接验证是否启动成功

    在这里插入图片描述

    在这里插入图片描述

    • 账户密码在users配置文件中配置

      在这里插入图片描述
      在这里插入图片描述

      如果需要指定主机登录,可以修改ip为指定主机的ip。

    • 如果登录失败,可以通过**./mycat console** 命令查看错误日志

    • 如果出现连接超时导致登录失败,可以重新设置超时时间

      在wrapper.conf中添加
      wrapper.startup.timeout=300 //超时时间300秒
      

3.搭建主从复制

  • 修改主机(master01)配置文件

    #编辑数据库配置文件
    vim /etc/my.cnf
    
    #在文件末尾添加
    #【必须】主服务器唯一ID
    server-id=1
    #【必须】启用二进制日志,指明路径
    log-bin=minedb-bin
    #设置需要复制的库(可设置多个)
    binlog-do-db=test
    #设置不要复制的库(可设置多个)
    #binlog-ignore-db=mysql
    #设置logbin格式
    binlog_format=STATEMENT
    

    logbin三种格式:

    • Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中。
    • Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。
    • Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。
      在这里插入图片描述
  • 修改从机(slave01、slave02)配置文件

    #编辑数据库配置文件
    vim /etc/my.cnf
    
    #在文件末尾添加
    #[必须]从服务器唯一ID
    server-id=2
    #[可选]启用中继日志
    relay-log=mydb-relay
    

    server-id一定要唯一!!!!

    在这里插入图片描述

  • 登录主机(master01)mysql

    • 创建用于主从复制的账户

      #创建主从复制账户
      CREATE USER 'slave1'@'%' IDENTIFIED BY '3CIH$AOu5W3';
      GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
      #此语句必须执行。否则见下面。
      ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '3CIH$AOu5W3';
      flush privileges;
      
    • 查看主机当前状态,记录File和Position

      #查看主机当前状态
      show master status;
      

      在这里插入图片描述

      注意:执行完后,不要再对主机master01做操作,否则会影响Postition偏移值

  • 登录从机(slave01、slave02)mysql

    • 执行sql创建主从复制关系

      #创建主从复制关系
      #主机ip
      CHANGE MASTER TO MASTER_HOST='ip',
      #创建用于主从复制的账户
      MASTER_USER='用户名',
      MASTER_PASSWORD='密码',
      #主机log文件和偏移值
      MASTER_LOG_FILE='',MASTER_LOG_POS=偏移值;
      
      #开启主从复制服务
      start slave;
      #查看从服务器状态
      show slave status;
      

      查看从服务器状态,标红字段均为Yes表示配置成功

      在这里插入图片描述

      如果这里出现了No,不要慌,后面还有字段,往后查看标红字段报错信息

      在这里插入图片描述

    • 测试主从复制,切换到主机(master01)

      #建库语句
      CREATE DATABASE test;
      #建表语句
      CREATE TABLE test1(id INT,NAME VARCHAR(50));
      #插入数据
      INSERT INTO test1 VALUES(1,"test01");
      

      执行完以上sql,两个从机上也会出现相应的库和表结构,主从复制搭建完成。

  • 如果需要重新设置主从关系在从机上执行

    stop slave;
    reset master;
    

4.搭建读写分离

  • 登录Mycat,添加数据源(使用注解方式设置)

    #添加数据源
    /*+mycat:createDataSource{"name":"rwSepw","url":"jdbc:mysql://192.168.230.145:3306/test?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"admin","password":"admin" } */;
    
    /*+mycat:createDataSource{"name":"rwSepr01","url":"jdbc:mysql://192.168.230.142:3306/test?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"admin","password":"admin" } */;
    
    /*+mycat:createDataSource{"name":"rwSepr02","url":"jdbc:mysql://192.168.230.144:3306/test?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"admin","password":"admin" } */;
    
    /*+ mycat:showDataSources{} */;
    

    在这里插入图片描述

  • 创建集群

    #创建集群
    #test集群
    /*!mycat:createCluster{"name":"prototypeTest","masters":["rwSepw"],"replicas":["rwSepr01","rwSepr02"]} */;
    /*+ mycat:showClusters{} */;
    

    在这里插入图片描述

  • 创建逻辑库,配置数据源

    • 创建逻辑库

      #创建逻辑表
      create database test;
      
    • 移动到**/opt/mycat/conf/schemas/** 目录,修改test.schema.json文件

      在这里插入图片描述

      vim /opt/mycat/conf/schemas/test.schema.json
      
      #添加targetName字段,指定数据源,将创建的数据源集群设置给targetName字段
      {
              "customTables":{},
              "globalTables":{},
              "normalProcedures":{},
              "normalTables":{},
              "schemaName":"test",
              "targetName":"prototypeTest",
              "shardingTables":{},
              "views":{}
      }
      
  • 重启Mycat

  • 验证读写分离(登录Mycat)

    • 在写主机数据库表test01中插入带系统变量数据,造成主从数据不一致

      INSERT INTO test01 VALUES(2,@@hostname);
      
    • 在Mycat里查询test01表,可以看到查询语句在主从三个主机间切换

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

至此,使用MyCat2搭建一主二从数据库集群完成。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现Mycat中间件的读写分离一主两从,需要按照以下步骤进行配置: 1. 在你的Mycat配置文件中,找到并编辑`server.xml`文件。你可以参考之前提到的文章《CentOS下安装和使用Mycat实现分布式数据库》中的配置方法。确保你已经正确配置了Mycat的主节点和两个从节点。 2. 在`server.xml`文件中,找到`<dataHost>`标签,并按照以下格式添加两个从节点的配置信息。例如: ```xml <dataHost name="node2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="node1" url="192.168.0.1:3306" user="root" password="root"/> <readHost host="node2" url="192.168.0.2:3306" user="root" password="root"/> </dataHost> <dataHost name="node3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="node1" url="192.168.0.1:3306" user="root" password="root"/> <readHost host="node3" url="192.168.0.3:3306" user="root" password="root"/> </dataHost> ``` 这里的`node2`和`node3`是从节点的名称,`192.168.0.1`是主节点的IP地址和端口号,`192.168.0.2`和`192.168.0.3`分别是两个从节点的IP地址和端口号。请根据你的实际情况进行修改。 3. 在`server.xml`文件中,找到`<schema>`标签,添加以下配置信息来指定读写分离规则: ```xml <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" primaryKey="id" dataNode="node1,node2,node3" rule="mod-long" /> </schema> ``` 这里的`testdb`是数据库的名称,`user`是表的名称,`node1,node2,node3`是数据节点的名称,`rule="mod-long"`表示使用取模的方式进行读写分离。请根据你的实际情况进行修改。 4. 保存并关闭`server.xml`文件。 5. 重启Mycat服务。 这样,你就成功配置了Mycat中间件的读写分离,其中包括一个主节点和两个从节点。当有读操作时,Mycat会自动将读请求分发给从节点进行处理,实现了读写分离的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Mycat中间件实现一主一从和双主双从的读写分离](https://blog.csdn.net/qq_33200967/article/details/80948708)[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_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mycat搭建读写分离(一主一从、双主双从)](https://blog.csdn.net/qq_41779565/article/details/125375231)[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_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是哪托

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值