vlambda博客
学习文章列表

Mycat配置读写分离

大家好,我是anyux。本文介绍Mycat配置读写分离。



MySQL分布式架构介绍

 1. schema拆分及业务分库
 2. 垂直拆分-分库分表
 3. 水平拆分-分片

企业代表产品

 360 Atlas-Sharding
 Alibaba cobar
 Mycat
 TDDL
 Heisenberg
 Oceanus
 Vitess
 OneProxy
 DRDS


用户创建及数据库导入

db117

 mysql -S /data/3307/mysql.sock -e "grant all on *.* to root@'%' identified by 'root';source /root/world.sql;"
 mysql -S /data/3308/mysql.sock -e "grant all on *.* to root@'%' identified by 'root';source /root/world.sql;"


配置文件介绍

目录文件 作用 备注
conf/schema.xml 主配置文件(读写分离、高可用、分布式策略定制、节点控制)
conf/server.xml mycat软件本身相关的配置
conf/rule.xml 分片规则配置文件,记录分片规则列表、使用方法等
logs/wrapper.log mycat启动日志
logs/mycat.log mycat详细工作日志

Mycat配置读写分离


db119上管理

备份schema.xml

 cd /app/mycat/conf
 mv schema.xml schema.xml.bak

配置schema.xml

实现一主一从读写分离

 <?xml version="1.0"?>  
 <!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
 <mycat:schema xmlns:mycat="http://io.mycat/">
 <!--以上为xml头文件格式-->
 
 <!--
      schema mycat的逻辑库定义
      TESTDB 默认逻辑库名称,是对后端数据库的集成
      checkSQLschema
      sqlMaxLimit
      dataNode="sh1" 标识数据节点,定位数据节点
 -->
 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1">
 </schema>  
 <!--
      dataNode 数据节点定义
      name="sh1" 对应schema中的dataNode值
      dataHost="db117" 对应dataHost中的name值
      database="world" 对应实际存储的数据库名称
 -->
 
     <dataNode name="sh1" dataHost="data" database= "world" />  
 <!--
      dataHost 后端主机定义
      name="db117" 对应dataNode中的dataHost值
      maxCon="1000"
      minCon="10"
      balance="1"
      writeType="0"
      dbType="mysql"
      dbDriver="native"
      switchType="1"
 -->
     <dataHost name="data" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1">
         <heartbeat>select user()</heartbeat>  
 <!--
      writeHost 写节点
      readHost 读节点  
      host="db1" 主机对应名称
      url="192.168.255.117:3307" 连接参数
      user="root" 用户名
      password="root" 密码
 -->
     <writeHost host="db1" url="192.168.255.117:3307" user="root" password="root">
             <readHost host="db2" url="192.168.255.117:3309" user="root" password="root" />
     </writeHost>
     <writeHost host="db3" url="192.168.255.118:3307" user="root" password="root">
             <readHost host="db4" url="192.168.255.118:3309" user="root" password="root" />
     </writeHost>        
     </dataHost>  
 </mycat:schema>

重启mycat

 mycat restart



连接测试

 mysql -uroot -p123456 -h 127.0.0.1 -P8066 -e "select @@server_id\Gselect @@server_id\Gselect @@server_id\G;begin;select @@server_id\G;commit;begin;select @@server_id\G;commit;"

下图中,写操作只对server_id为7的数据库,读操作随机在3个数据库选择