搭建mycat中的分库分表

  • 开发步骤:

    • 第一步:准备三台服务器 mycat、 master、 slave

      mycat 192.168.68.131 虚拟的数据库 作为代理服务器使用的

      master 192.168.68.129 物理数据库1 作为真正存储数据的数据库

      slave 192.168.68.130 物理数据库2 作为真正存储数据的数据库

    • 在master上面创建一个数据库,作为测试使用 创建数据库 : ZKL_TABLE

    • 在master上面新建数据库表 dept和user 在slave上面新建数据库表 dept和student

    • 表的功能介绍:dept在这里充当负载均衡,可以操作master和slave两个数据库,user表只让他操作master数据库,student表只让他操作slave数据库

    • 让dept这张表实现负载均衡,谁的执行速度快就加载哪个数据库。

    • 第二步:配置mycat文件:server.xml schema.xml rule.xml

    • 配置server.xml文件

          <!--配置连接mycat的信息
      	   user  新增用户配置  user指的是用户配置节点  name ="连接mycat的登录账户"
      	   password 连接mycat的登录密码
      	   schema 使用mycat连接的数据库名  此处声明必须使用大写
      	   如果连接的数据库较多,中间用逗号隔开
      	   该数据库名 需要和后面配置的schema.xml文件中的schema配置产生一一映射 (关联)保持一致
      	   参数 privileges
      	        readOnly   false用户可以对表进行读写操作    true只读模式
      	   user可以配置多个	
      	-->
      	<user name = "root">
      	     <property name = "password">root</property>
      	     <property name = "schema" >ZKL_TABLE</property>
               <property name = "readOnly">false</property>		 
      	</user>
      
    • 配置 schema.xml文件

           <!--配置mycat的物理数据库和逻辑表
      	    <property name = "schema" >ZKL_TABLE</property>
      	     name = "ZKL_TABLE"  两者之间保持一致
      	 -->   
      	 <schema name = "ZKL_TABLE" checkSqlschema="false" sqlMaxLimit = "100">
      		<table name = "user" dataNode = "dn01" />	
      	    <table name = "student" dataNode = "dn02" />
      		<table name = "dept" dataNode = "dn01,dn02"
             		   primaryKey = "d_id"  autoIncrement = "true" rule = "mod-log"/>
      	 </schema>
      	 
      	 <!--分库分表配置  分片-->
      	 <dataNode name = "dn01" dataHost = "master" dataBase = "ZKL_TABLE"/>
      	 <dataNode name = "dn02" dataHost = "slave01" dataBase = "ZKL_TABLE"/>
      	 
      	 <!--注意事项:尽量schema配置放在一起,dataNode配置放在一起-->
      	 
      	 <!--配置物理数据库 真实的数据库-->
      	 <dataHost name = "master" maxCon = "1000" minCon = "10" balance = "0"
      	            writeType = "0" dbType = "mysql" dbDriver = "native">
      	        
      			<!--心跳检查机制-->
      			<heartbeat>select user();</heartbeat>
      			<!--指定到底哪个服务器来处理dataNode请求-->
      			<writeHost host = "master" url = "192.168.68.129:3306" user = "root"
      			           password = "MyNewPass4!">
      			</writeHost>					
      	 </dataHost>
      	 
           <dataHost name = "slave01" maxCon = "1000" minCon = "10" balance = "0"
      	            writeType = "0" dbType = "mysql" dbDriver = "native">
      	        
      			<!--心跳检查机制-->
      			<heartbeat>select user();</heartbeat>
      			<!--指定到底哪个服务器来处理dataNode请求-->
      			<writeHost host = "slave01" url = "192.168.68.130:3306" user = "root"
      			           password = "MyNewPass4!">
      			</writeHost>					
      	 </dataHost> 
      

      参数介绍:

      1.schema  数据库的设置,此数据库为逻辑数据库 name值需要和server.xml文件中的schema保持一致
          * schema属性介绍
             * name             逻辑数据库名
             * checkSqlschema   数据库的前缀配置  详情看文档  此处配置false
             * sqlMaxLimit      select查询时默认的limit  避免查询全表 
          * table属性介绍
             *  name  表名
             *  dataNode  表到底存储在哪个节点上
             *  primaryKey  主键字段名
             *  autoIncrement  是否自增
             *  rule   分库分表规则  此处采用mod-log  平均分配
      2.dataNode 分库信息,进行分库的相关配置
            * 属性介绍
              name  节点名
              dataHost  物理数据库的域名,与dataHost标签中的name属性保持一致
              dataBase  物理数据库的数据库名
      3.dataHost 物理数据库的配置 真正存储数据的数据库     
            * 属性介绍
               * name       节点名 与dataNode中的dataHost属性保持一致
               * balance    负载均衡方式
                             balance = "0" 不开启读写分离
                             balance = "1" 全部的readHost与writeHost都参与select语句的负载均衡
                             balance = "2" 所有的读操作都随机在readHost和writeHost上分发
                             balance = "3" 所有的读操作都随机分发到writeHost中的readHost中执行,也就是 wirteHost不参与负载均衡
              *   writeType 写入的方式
                             writeType = "0" 所有的读操作发送到配置的第一个writeHost中,如果第一个挂了,立马切换到第二个writeHost中执行
                             writeType = "1" 没有还没有实现
      
              *   dbType     数据库的类型  哪个厂商生成的数据库产品  mysql oracle  Sql Server
              *   heartbeat  心跳检测语句  注意在结尾添加分号";"
      
    • 分别在三台服务器中进行域名配置 mycat master slave01

      192.168.68.129 192.168.68.130 这两台服务器均有ZKL_TABLE

      user表只写入dn01 —>192.168.68.129

      student表只写入dn02 —>192.168.68.130

      dept表写入到dn01,dn02中 也就是192.168.68.129 和 192.168.68.130

      分库分表的规则:mod-long 将数据平均分配

    • 配置rule.xml文件

          <tableRule name="mod-long">
      		<rule>
      			<columns>d_id</columns>
      			<algorithm>mod-long</algorithm>
      		</rule>
      	</tableRule>
          <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
      		<!-- how many data nodes -->
      		<property name="count">2</property>
      	</function>
      
  • 测试

    • 启动mycat

      切换到bin目录中

      cd …/bin

      ./mycat start

    • 查看mycat的启动日志 wrapper.log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值