MyCat 笔记-2017年12月22日
来源:互联网 发布:如何做网络舆情监测员 编辑:程序博客网 时间:2024/06/07 03:25
MyCat 笔记
标签(空格分隔): 数据库 mycat
- MyCat 笔记
- 一些概念
- 配置文件说明
- 全局主键及自增长主键
- 全局主键
- 自增长主键
- 分片规则中需要注意的点
- 自然月分片
- 下面是一些总结的知识点
- mycat管理命令
- mycat读写分离
- 基于mysql master-slave架构的读写分离
- mycat故障切换
- mycat优化
- mysql优化
- mycat源码解析
- 路由判断
本文写作用的mycat版本为1.6,mysql 5.7
一些概念
- 逻辑库(schema):
- 逻辑表(table):
- 分片表:
- 非分片表:
- ER表:分片时子表依赖父表,避免夸库关联查询。
- 全局表:
- 分片节点(dataNode):每个表分片所在的数据库就是一个分片节点
- 节点主机(dataHost):每个分片节点不一定独占一台机器,每个机器就是一个节点主机。尽量将读写压力高的分片节点均匀地放在不同的节点主机上。
配置文件说明
mycat注意配置文件是conf目录下的server.xml、schema.xml和rule.xml。每个文件中都给的有默认的例子,官方的pdf文档也介绍的很详细。用到什么功能时直接收索官方pdf文档就行。
- server.xml,配置的是mycat服务器的属性,mycat对应用程序而言就是一个数据库,这个文件就是配置的这个数据库的数据。对应源码中的SystemConfig.java.
- schema.xml,设置的就是mycat与真实库的联系。里面有schema、dataNode、dataHost三个属性。schema相当于mysql中的databases,里边的每个table属性对应一张表。dataNode对应分片数据库的节点,即mysql实例。dataHost对应真实数据库,配置读写分离就是在这里配置,详情看官方pdf例子。
- rule.xml,设置的是分片的规则,就是各表对应的具体的分片的规则。里边的例子很全,看官方pdf文档模仿就行。
- sequence是全局序列的配置文件
- log4j.xml,是日志输出配置文件
全局主键及自增长主键
全局主键
设置全局主键有两种方式,本地xml配置和数据库配置。
详情可参考该网站:http://www.cnblogs.com/ivictor/p/5235147.html
其中需要注意:sequence_*.properties里面的参数要求大写
自增长主键
自增长主键是在全局主键基础上设置的。方法如下:
1. mysql中的表主键要设置为自增
2. mycat中的table标签中设置 autoIncrement=”true”
3. mycat对应的sequence_db_conf.properties增加相应的数据:TABLE1=dn1.需要注意:
* TABLE1为表名,且为大写
* dn1为全局主键表所在的节点
5.mycat_sequence表中添加数据,其中name为表名,不区分大小写。
分片规则中需要注意的点
自然月分片
<function name="month_fun" class="io.mycat.route.function.PartitionByMonth"> <property name="dateFormat">yyyy-MM-dd hh:mm:ss</property> <property name="sBeginDate">2017-11-01 00:00:00</property> <property name="sEndDate">2017-12-01 00:00:00</property> </function>
自然月分片会根据字段中的月份,从sBeginDate算起,按照schema.xml中设置的节点的顺序,依次插入对应节点。比如上面的例子,2017-11月的数据会插入第一个节点,2017-12的数据会插入第二个节点,2018-01月的数据会插入第三个节点,依次类推。需要注意的是,要提前设置好所有的节点。比如你节点只设置到了2018-01月,这时插入2018-02月的数据就会报错:Can’t find a valid data node for specified node index :TABLE2 -> LOGINDATE -> 2018-03-02 12:12:12 -> Index : 4。其中index是这条数据应该插入的节点序号,序号是从0开始排的。
自然月分片是有循环的,以sEndDate与sBeginDate之间相差几个月,就以几为循环个数,超过sEndDate的月份重新从第一个节点开始,具体代码见:
io.mycat.route.function.PartitionByMonth.reCalculatePartition(int targetPartition)
下面是一些总结的知识点:
- mycat会把全局表在每个节点存储一份,当全局表有修改时,会对所有节点的表进行修改,以保持数据一致性。
- mycat支持zookeeper和本地xml 两种配置方式,默认本地xml配置。如果想配置成以zookeeper方式启动,则应把conf目录下的zk.conf文件中的loadfromzk参数设置为true.启动zookeeper后,需要执行bin目录下的初始化zookeeper脚本。
- 如果使用zookeeper配置方式,则所有的配置参数都在zk-create.yaml文件中,该文件涵盖了conf目录下的schema、server等文件中的所有配置项。
- mycat 1.4/1.5版本,schema标签里的dataNode属性是配置默认的分片节点,没有分片的节点就会默认在这个属性设置的节点查询。需要注意的是,用navicat查询不到未分片的表,但程序可以正常运行。
- sql语句中最后不要带库名,比如“select * from db1.table1;”,最好不要带“db1.”。原因可查询schema标签checkSQLschema属性说明
- sql语句中不要用>、<做比较,要用between……and……。
- mycat支持DDL命令。
- mycat每一种分片规则都有一个类处理,这些类在io.mycat.route.function包下。
mycat管理命令
- mycat有两个端口,8066数据端口和9066管理端口,可以在server.xml中设置serverPort和managerPort属性修改。
- 登录管理端口命令:mysql -uroot -h127.0.0.1 -p123456 -P9066
- mycat的管理命令是在命令前+@@,比如查询帮助命令:show @@help;
- reload @@config:更新配置文件,此命令执行期间mycat不可用!
- show @@database:查看数据库
- show @@datanode:查看数据节点列表,可以用
show @@datanode where schema=dn1;
来查询具体节点概况。 - show @@heartbeat:查询心跳状态
- show @@version:查询版本
- show @@connection:查询前端连接状态
- kill @@connection id,id,id:关闭连接
- show @@backend:查询后端连接状态
- show @@cache:查看缓存
- show @@datasource:查看数据源状态
- switch @@datasource name:index:切换数据源,注意:切换数据源时会将原数据源所有连接池中的连接关闭,并从新数据源创建新的连接,此时mycat不用用。
- show @@syslog limit=100:显示100条系统日志
- reload @@user_stat:清除缓存
- show @@sql:显示在mycat中执行过的sql;
- show @@sql.slow:显示慢sql语句
- show @@sql.sum:显示sql语句的整体执行情况、读写比例等。
- reload @@sqlstat=open/close:开启或关闭sql监控分析的指令
- reload @@sqlslow=1000:设置慢sql时间阀值为1000毫秒
- reload @@user_stat:重置sql监控分析的数据
mycat读写分离
mycat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制。
基于mysql master-slave架构的读写分离
balance=”0”时,不开启读写分离,所有读操作都发送到当前的writeHost上。
balance=”1”时,所有读操作都发送到当前的writeHost对应的readhost和备用的writehost。
balance=”2”时,所有读操作都发送到所有的writeHost和readhost上,即当前datahost内的所有服务器都参与分担读操作。
balance=”3”时,所有读操作只发送到当前writeHost对应的readhosts上,比较适合双主热备、多个slave的情况。
mycat故障切换
例子可以看:https://www.cnblogs.com/kaye0110/p/5138568.html
一个dataHost里配置了两个或多个writeHost的情况下,如果第一个writeHost宕(dang)机了,则mycat会在默认的3次心跳检查失败后,自动切换到下一个writeHost执行DML SQL语句,并在conf/dnindex.properties文件中记录当前所用的writeHost的index(第1个为0,第2个为1,以此类推)。注意:此文件不能删除和擅自变更。
当原来配置的mysql写节点宕机回复后,保持现有状态不变,将恢复后的mysql节点作为从节点,跟随新的主节点,重新配置主从同步,原先跟随该节点做同步的其他节点同样重新配置同步源,这些节点的数据手工完成同步后,再加入mycat.
mysql主从同步设置:http://blog.51cto.com/369369/790921
mycat优化
mysql优化
mycat源码解析
路由判断
io.mycat.route.impl.DruidMycatRouteStrategy.routeNormalSqlWithAST()是判断路由规则的方法。
- MyCat 笔记-2017年12月22日
- 2017年10月12日笔记
- 2017年10月12日笔记
- Python学习笔记2017年12月22日
- 2017年10月22日训练笔记
- 学习笔记 2017年9月12日
- 2017年10月12日训练笔记
- 2017年12月1日训练笔记
- 2017年12月3日训练笔记
- 2017年12月7日 JAVA笔记
- 2017年12月7日训练笔记
- 2017年12月8日 Java 笔记
- 2017年12月10日训练笔记
- 2017年12月17日训练笔记
- Python学习笔记2017年12月23日
- Python学习笔记2017年12月24日
- Python学习笔记2017年12月25日
- 2014年410月22日笔记
- 关于创建“多线程”这个类别的初衷
- 机器人进阶学习(三)--通过键盘或者利用rostopic 发布话题控制机器人运动
- 开始学算法的第一天
- 电路图中的这个R285的作用
- linux下搭建git服务器
- MyCat 笔记-2017年12月22日
- unity编辑器拓展八——unity里面分离模型
- 设计模式学习笔记(三)- -装饰者模式
- 关于GCD的一些技巧笔记
- Android gradle和gradle插件配置
- java的日志方案分析
- ubuntu常用命令 -- 用于查找
- Android UI绘制 -- 滑动
- 知识学习——Java文档注释