Linux环境中Mycat使用

一、介绍

1. 实现功能

  1. 可以对数据库进行分库分表,提升效率
  2. 支持读写分离,支持Mysql双主多从,以及一主多从的模式
  3. 多平台支持,部署和实施简单
  4. 自动故障切换,高可用性
  5. 遵守sql 92标准

2.基础知识介绍

  1. 切分
    逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分.
    1.1 纵向切分
          把一个数据库切分成多个数据库,配置方便 只能实现两张表的表连接查询. 将一张表中的数据,分散到若干个 database 的同结构表中。多个表的数据的集合是当 前表格的数据。
    1.2 横向切分
          把一个表切分成多个表,相比纵向切分配置麻烦 无法实现表连接查询. 将一张表的字段,分散到若干张表中,将若干表连接到一起,才是当前表的完整数据。
  2. 逻辑库
          Mycat 中定义的 database.是逻辑上存在的.但是物理上未必存在. 主要是针对纵向切分提供的概念。
          访问 MyCat,就是将 MyCat 当做 MySQL 使用。 Db 数据库是 MyCat 中定义的 database。通过 SQL 访问 MyCat 中的 db 库的时候,对应 的是 MySQL 中的 db1,db2,db3 三个库。物理上的 database 是 db1,db2,db3.逻辑上的 database 就是 db。
  3. 逻辑表
          Mycat 中定义的 table.是逻辑上存在,物理上未必存在.
          主要是针对横向切分提供的概念 MyCat 中的表格 table,其字段分散到 MySQL 数据库的表格 table1,table2,table3 中。
  4. 默认端口
    Mycat 默认端口是 8066
  5. 数据主机
    dataHost 物理 MySQL 存放的主机地址.可以使用主机名,IP,域名定义.
  6. 数据节点
    dataNode 物理的 database 是什么.数据保存的物理节点.就是 database.
  7. 分片规则
    当控制数据的时候,如何访问物理 database 和 table. 就是访问 dataHost 和 dataNode 的算法. 在 Mycat 处理具体的数据 CRUD 的时候,如何访问 dataHost 和 dataNode 的算法.如:哈希 算法,crc16 算法等.

二、安装

1. 安装JDK

基于Java实现,使用时需要安装JDK,这里就不介绍JDK的安装了。

2. 安装数据库主从

配置完主从后,在主数据库中添加mycat使用的用户。

3. 安装mycat

上传mycat压缩包,解压后需要进入conf目录下配置,配置完即可使用。

三、使用

文件介绍

  1. rule.xml

    用于定义分片规则的配置文件.主要是查看.很少修改. mycat 默认的分片规则: 以 500 万为单位,实现分片规则.

  2. schema.xml

    用于定义逻辑库和逻辑表的配置文件.在配置文件中可以定义读写分离,逻辑库,逻辑 表,dataHost,dataNode 等信息.

    2.1 标签 schema

    配置逻辑库的标签

    • 属性 name
      逻辑库名称

    • 属性 checkSQLschema
      是否检测 SQL 语法中的 schema 信息.

      如: Mycat 逻辑库名称 A, dataNode 名称 B
      SQL : select * from A.table; checkSQLschema 值是 true, Mycat 发送到数据库的 SQL 是 select * from table; checkSQLschema 值是 false,Mycat 发送的数据库的 SQL 是 select * from A.table;

    • sqlMaxLimit
      Mycat 在执行 SQL 的时候,如果 SQL 语法中没有 limit 子句.自动增加 limit 子句. 避免一次 性得到过多的数据,影响效率. limit 子句的限制数量默认配置为 100.如果 SQL 中有具体的 limit 子句,当前属性失效.

      SQL : select * from table . mycat
      解析后: select * from table limit 100
      SQL : select * from table limit 10 . mycat 不做任何操作修改.

    2.2 标签 table

    定义逻辑表的标签,如果需要定义多个逻辑表,编写多个 table 标签。要求逻辑表的表 名和物理表(MySQL 数据库中真实存在的表)的表名一致。

    • 属性 name
      逻辑表名

    • 属性 dataNode
      数据节点名称.

      配置文件中后续需要定义的标签(即物理数据库中的 database 名称). 多个名称使用逗号分隔. 多个 database 定义后,代表分库。

    • 属性 rule
      分片规则名称.

      具体的规则名称参考 rule.xml 配置文件. SQL 语句发送到 Mycat 中后,Mycat 如何计算,应该将当期的 SQL 发送到哪一个物理数 据库管理系统或物理 database 中。

    2.3 标签 dataNode

    定义数据节点的标签, 定义具体的物理 database 信息的。

    • 属性 name 数据节点名称, 是定义的逻辑名称,对应具体的物理数据库 database
    • 属性 dataHost 引用 dataHost 标签的 name 值,代表使用的物理数据库所在位置和配置信息.
    • 属性 database 在 dataHost 物理机中,具体的物理数据库 database 名称.

    2.4 dataHost 标签

    定义数据主机的标签, 就是物理 MYSQL 真实安装的位置。

    • 属性 name 定义逻辑上的数据主机名称

    • 属性 maxCon/minCon 最大连接数, max connections 最小连接数, min connections

    • 属性 dbType 数据库类型 : mysql 数据库

    • 属性 dbDriver 数据库驱动类型, native,使用 mycat 提供的本地驱动.

    • balance 属性

      balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
      balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
      balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
      balance=”3”, 所有读请求随机的分发到 writeHost 对应的 readhost 执行,writerHost 不负担读压力

    • writeType 属性

      writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第 二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:conf/dnindex.properties (datanode index)
      writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐

    • switchType 属性

      也涉及到读写分离问题,可以解决 IO 延迟问题。
      switchType=’-1’ 表示不自动切换
      switchType=‘1’ 默认值,表示自动切换
      switchType=‘2’ 基于 MySQL 主从同步的状态决定是否切换读写主机,心跳语句为 show slave status。 当心跳监测获取的数据发现了 IO 的延迟,则读操作自动定位到 writeHost 中。如果心跳监测获取的数据没有 IO 延迟,则读操作自动定位到 readHost 中。建议为 不同的表格定位不同的 dataHost 节点。

    2.4.1 dataHost 子标签witeHost

    写数据的数据库定义标签. 实现读写分离操作.

    • 属性 host 数据库命名
    • 属性 url 数据库访问路径
    • 属性 user 数据库访问用户名
    • 属性 password 访问数据库用户密码

    2.4.1.1 writeHost子标签readHost

    读数据的数据库定义标签. 实现读写分离操作.

    • 属性 host 数据库命名
    • 属性 url 数据库访问路径
    • 属性 user 数据库访问用户名
    • 属性 password 访问数据库用户密码

    2.4.2 dataHost 子标签heartbeat

    执行心跳检测时发送给数据库的语句

注意: 在 mycat 中,rule.xml 配置文件中定义的分片规则只能给一个表格使用。如果 有多个表格使用同一个分片规则,需要再 rule.xml 配置文件中,为每个表格定义一个分片规 则。

scheme.xml模板

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> 
		<table name="t_user" dataNode="dn1,dn2,dn3" rule="crc32slot" /> 
	</schema> 
	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" /> 
	<dataNode name="dn3" dataHost="localhost1" database="db3" /> 
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="hostM1" url="192.168.11.138:3306" user="root" password="root"/> 
	</dataHost> 
</mycat:schema>
  1. server.xml

配置 Mycat 服务信息的
如: Mycat 中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等. 常见修改内容:

server.xml部分模板

<property name="serverPort">8066</property> <!-- Mycat 服务端口号 --> 
<property name="managerPort">9066</property><!-- Mycat 管理端口号 --> 
<user name="root"><!-- mycat 用户名 --> 
	<property name="password">密码</property> 
	<property name="schemas">用户可访问逻辑库名</property> <!-- 表级 DML 权限设置 --> 
	<!-- 不检查权限 
	<privileges check="false"> 
		<schema name="逻辑库名" dml="0110" > 
			<table name="逻辑表名" dml="0000"></table> 
			<table name="tb02" dml="1111"></table> 
		</schema> 
	</privileges> 
	--> 
</user> 
<user name="user"><!-- 其他用户名 --> 
	<property name="password">密码</property> 
	<property name="schemas">可访问逻辑库名</property> 
	<property name="readOnly">是否只读</property> 
</user>

四、结尾

根据自己的需要对schema.xml以及rule.xml配置后,在bin目录下启动mycat即可。mycat可以当做数据库来使用。
在安装有mysql的系统下,运行下面这句话即可。
mysql -u用户名 -p密码 -hmycat主机IP -P8066

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值