mycat的安装及配置文件应用
table:逻辑一 mycat的安装
1 基于jdk运行
2 获取安装包
3 解压
tar -xf Mycat***.tar.gz
4 测试运行
mycat的根目录中bin保存了mycat的核心命令文件
mycat console 命令测试运行
配置文件
根目录在conf中有两个核心配置文件,配置内容可以实现:读写分离,高可用替换,分布式存储,ER分片表的逻辑
server.xml:配置当前mycat启动的资源的设定(例如端口占用,线程登录名,密码等等)
schema.xml:逻辑库,逻辑表,分片表,ER表的配置,底层连接实际数据库的信息.
server.xml中两个重要标签
system:配置mycat启动时占用的系统的一些资源属性
user标签:指定当前登录的用户的信息
属性:name 表示当前登录的mycat的用户名
password:表示当期登录的密码
schemas:表示当前这个用户可以查看的这个逻辑库,以","分割,这里的名称必须和schema.xml中的标签名称对应
readOnly:表示当前用户只读,不能写操作
quarantine:安全措施 可以设置黑名单 白名单
字标签:whitehost:白名单列表 blacklist:黑名单列表
<user name="root">
<property name="password">root</property>
<property name="schemas">mytest</property>
</user>
schema.xml:当前mycat代理数据库集群的设定
可以通过这个配置文件来实现逻辑库,分片表,非分片表,ER表,读写分离,高可用替换
标签结构
schema:逻辑库
table:逻辑表
childetable:逻辑表的从逻辑表
datanode:数据分片节点的配置,一个数据分片node对应的数据库结构可能很简单,也可能很复杂;指向一个dataHost
datahost:
heartbeat:心跳检测,语句不一样,替换逻辑可能不同
writeHost:写操作的数据库节点(也可以读)
readHost:与当前writeHost相关的(主从)读节点(只读)
每个标签的属性
schema中
name:逻辑库的名字
checkSQLschema:例如sql语句“select * from tb_item”,mycat拦截,将其表格名称根据当前属性的设 定进行修改,false不会自动检查 逻辑库名称,不拼接逻辑库名字“select * from tb_item”,可能会导致无 法找到逻辑库执行后续逻辑,true自动检测,会拼接逻辑库名 字“select * from TESTDB.tb_item”
sqlMaxLimit:一种查询的保护措施,执行查询语句时,自动配置的分页数据,只查前100条,在没有limit条件时
table:逻辑表
name:逻辑表名称,配置和真实数据库的表名最好相同
dataNode:对应一个,多个数据库节点的标签,多个值表示分片,单个值表示非分片
rule:数据分片的计算规则,auto-sharding-long,利用long整型的id值进行范围划分(0-500万 (index0),500万-1000万(index1),1000万 -1500万(index2))
primaryKey:指向表格的主键,最好与真实字段一致
type:表格类型,默认不是global
childTable:从表
<childTable name="orders" primaryKey="ID" joinKey="order_id" parentKey="id">
name:从表名称,保持和数据库真实表格一致
primaryKey:主键名称
jointKey:从表中的外键字段;必须和真实数据库的从表外键字段名一致
parentKey:主表的字段名,必须和主表与从表的外键相关,对应主表的字段名称
datanode标签:数据节点
<dataNode name="dn1" dataHost="localhost1" database="db1" />
name:表示名称,逻辑库,逻辑表指向的依据
dataHost: 指向真实管理数据库的标签名称dataHost
database: 真实数据库名称,逻辑库和所有真实数据库名称一致
datahost:管理数据分片的真实数据库的标签,内部包含真实数据库的信息
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
name:名称,与datanode指向对应
maxCon:底层数据库的链接最大数
minCon:相反
balance:值是0,1,2,3,分别表示对当前datahost中维护的数据库们的读操作逻辑
0:不开启读写分离,所有的读写操作都在最小的索引号的writeHost(第一个writeHost标签)
1:全部的readHost和备用writeHost都参与读数据的平衡,如果读的请求过多,负责写的第一个writeHost也分担一部分
2 :所有的读操作,都随机的在所有的writeHost和readHost中进行
3 :所有的读操作,都到writeHost对应的readHost上进行(备用writeHost不参加了),在集群中没有配置ReadHost的情况下,读都到第一个writeHost完成
writeType:控制当前datahost维护的数据库集群的写操作
0:所有的写操作都在第一个writeHost标签的数据库进行
1:所有的写操作,都随机分配到所有的writeHost(mycat1.5完全不建议配置了)
dbtype:数据库类型(不同数据库配置不同名称,mysql)
dbDriver:数据库驱动,native,动态获取
switchType:切换的逻辑
0:故障不切换
1:故障切换,当前写操作的writeHost故障,进行切换,切换到下一个writeHost;
slaveThreshold:标签中的<heartbeat>用来检测后端数据库的心跳sql语句;本属性检查从节点与主节点的同步情况(延迟时间数),配合心跳语句show slave status; 读写分离时,所有的readHost的数据都可靠
配置案例:
非分片表的入门配置(只配置逻辑库)
server.xml(备份)
修改登录名,和当前用户可操作的逻辑库名称
<user name="root">
<property name="password">root</property>
<property name="schemas">mytest</property>
</user>
schema.xml:用mycat管理单机数据库的mytest物理库
<schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mytest" />
<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="10.9.39.13:3306" user="root"
password="root">
</writeHost>
</dataHost>
bin目录下启动mycat
#mycat console
登录mycat
#mysql -uroot -proot -P8066 -h 10.9.39.13
对于读写分离
balance的值进行测试
修改schema.xml
<schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mytest" />
<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="10.9.39.13:3306" user="root"
password="root">
</writeHost>
<writeHost host="hostM2" url="10.9.100.26:3306" user="root"
password="root">
</writeHost>
</dataHost>
高可用替换
switchType=1 自动切换 两个writeHost间
数据分片数据库集群2个writeHost,宕机第一个,观察数据的读写功能
<schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mytest" />
<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="10.9.39.13:3306" user="root"
password="root">
</writeHost>
<writeHost host="hostM2" url="10.9.100.26:3306" user="root"
password="root">
</writeHost>
</dataHost>
分布式数据库集群(配置分片表)
table标签中的dataNode
mycat计算分片的逻辑
○ 根据table中指定rule的值 "auto-sharding-long" 寻找conf下rule.xml
中的分片计算逻辑
<tableRule name="auto-sharding-long"> //分片rule的名称
<rule>
<columns>id</columns> //计算分片对应的字段名
<algorithm>rang-long</algorithm> //计算分片的算法,对应lib包 中一个可以计算rang-long的类,源码不会超过100行
</rule>
</tableRule>
○ 找到的计算算法对应包中类,如果自定义计算方式,可以完成java代码
将jar包扔到mycat的库中lib文件夹,指定算法
<function name="rang-long" //对应算法名称
class="org.opencloudb.route.function.AutoPartitionByLong">
//当前算法具体代码
<property name="mapFile">autopartition-long.txt</property>
//算法加载的辅助计算文件
</function>
○ autopartition-long.txt中定义了默认3个分片的数字long范围
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2
计算字符串(待补充)
rule的名字叫mod-long
<tableRule name="mod-long">
<rule>
<columns>id</columns> //对id字段进行计算
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
找到function
<function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
对id字段进行hash取余计算,取余的n就是这里的count 必须对应正确的dataNode节点个数(2)
修改schema.xml添加一个新的分片表,指定计算逻辑mod-long
在分片表格中的table标签添加
<table name="tb_product" primaryKey="id" dataNode="dn1,dn2"
rule="mod-long"/>
ER表
table childTable(joinKey从表外键,parentKey主表相关字段)
<table name="t_order" primaryKey="id" dataNode="dn1,dn2" rule="auto-sharding-long">
<childTable name="t_order_item" primaryKey="id" jointKey="order_id" parentKey="id"/>
</table>
mycat的安装及配置文件应用的更多相关文章
- Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解
一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...
- mycat基本概念及配置文件详解
在介绍mycat之前,首先来了解一下数据库切分. 对于海量数据处理,按照使用场景,主要分为两类:联机事务处理(OLTP)和联机分析处理(OLAP). 联机事务处理也称为面向交易的处理系统,其基本特征是 ...
- MyCat的安装及基本使用(MySQL分库分表)
1.Mycat的简介 1.1 数据库集群产生的背景 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数 ...
- MyCat(1.2)Mycat的安装
[0]基本环境 OS:CentOS7.5 Software envireonment:JDK1.7.0 Master Software:Mycat1.6.5 Linux Client:CRT 8.0 ...
- mycat的安装及使用 看这一篇就够了
1.环境准备 本次使用的虚拟机环境是centos6.5 首先准备四台虚拟机,安装好mysql,方便后续做读写分离和主从复制. 192.168.85.111 node01 192.168.85. ...
- 01 - nginx - 安装、配置文件、默认网站、虚拟主机
一.运维: . 介绍服务器. 服务器逻辑: 服务器选择 操作系统 部署逻辑 业务环境部署逻辑 业务部署图 软件部署文档 日常维护文档 测试 开发上传代码到源码系统 上线 - 测服务器,内测 预发布测试 ...
- Mysql数据库介绍、安装和配置文件
Mysql数据库介绍.安装和配置文件 MySQL数据库介绍 mysql是开源关系型数据库,遵循GPL协议. mysql的特点是性能卓越且服务稳定,开源,无版本限制,成本低,单进程多线程,多用户,基于C ...
- MongoDB官方下载安装设置配置文件指定端口号
1.)下载 官网(https://www.mongodb.com/)右上角try free 进入下载中心,下载指定版本 ZIP和MSI随便 如果浏览器下载的慢,可以直接使用下载地址,然后迅雷下 操作 ...
- mycat是什么?你是怎么理解的?你们公司分库分表的分片规则是什么?搭建mycat环境常用的配置文件有哪些?
1.mycat是什么? 国内最活跃的.性能最好的开源数据库分库分表中间件 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集 ...
随机推荐
- js消息提示框插件-----toastr用法
(本文系转载) 因为个人项目中有一个提交表单成功弹出框的需求,从网上找了一些资料,发现toastr这个插件的样式还是不错的.所以也给大家推荐下,但是网上的使用资料不是很详细,所以整理了一下,希望能给 ...
- bootstrap dialog对话框,完成操作提示框
1. 依赖文件: bootstrap.js bootstrap-dialog.js bootstrap.css bootstrap-dialog.css 2.代码 BootstrapDialog.co ...
- 1.浅析Hadoop之HDFS
HDFS ,Hadoop Distribute File System,hadoop分布式文件系统. 主从架构,分主节点NameNode,从节点DataNode.当然还有个SecondaryName, ...
- mysql七:索引原理与慢查询优化(待完整)
一.介绍 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优 ...
- html中通过移除空格的方法来解决浏览器上的留白间距该怎么理解?
今天在切图的时候,碰到一个兼容性的问题,很幸运最后通过张金鑫老师的文章解决了这个问题!但在阅读张老师文章的时候,我有个地方不明白,在网上查了下也没找到我想要的答案,后来自己想了半天好像是这么回事,现在 ...
- Aligning Plots in a Column作图列对齐
Plot[Sin[x], {x, 0, Pi}] Plot[10000 Sin[x], {x, 0, Pi}] 直接作图左边无法对齐,影响图的美观.可以使用左边界空格实现列对齐,代码如下: optio ...
- Fiddler-修改HTTP请求参数
在进行 App 测试时,经常需要修改请求参数,以获得不同的显示效果,以查看相应的页面显示处理.例如:可以通过修改 HTTP请求 的参数,来获取不同的响应结果. 下面以修改 HTTP请求的商品系统编号为 ...
- requireJS基本配置相关
requireJS: (1)实现js文件的异步加载,避免页面失去响应: (2)管理模块之间的依赖性,便于代码的编写和维护. 加载: <script src="js/require.js ...
- Java—集合框架Map
Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,key和value可以是任意类型的对象,能够实现根据key快速查找value. Map中的键值对以Entr ...
- 动态获取Drawable图片资源
比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过"R.drawable.img_x"的 ...