Mycat(数据库中间件)快速进阶sqlmysqlxmljdbcschema

Mycat从1.5版本开始支持两种配置方式:ZooKeeper及本地XML方式。Mycat默认以本地加载XML的方式启动,如果需要配置成以ZooKeeper的方式启动,则应把conf目录下zk.conf文件中的loadfromzk参数设置成true。

2、server.xml配置文件

server.xml配置文件包含了Mycat的系统配置信息

2.1、user标签

userTESTDBtrueTESTDB

若要在schema.xml中定义TESTDB,则TESTDB必须先在server.xml中定义,否则该用户将无法访问该TESTDB。如果使用了use命令,则Mycat会有如下错误提示:

Error1044(HY000):Accessdeniedforuser'test'todatabase'xxx'

可以修改user标签的name属性来指定用户名,修改password的值来修改密码,修改readOnly的值为true或false来限制用户的读写权限。如果需要同时访问多个schema,则多个schema之间使用英文逗号隔开,例如:

TESTDB,db1,db2

benchmark属性

通过设置benchmark属性的值来限制前端的整体连接数量,如果其值为0或不对其进行设置,则表示不限制连接数量。例如:

1000

2.2、system标签

2.2.1、charset属性

utf8

2.2.2、processors属性

processors属性指定系统可用的线程数量,默认值为机器CPU核心×每个核心运行线程的数量,processors值会影响processorBufferPool、processorBufferLocalPercent、processorExecutor属性。NIOProcessor的个数也由processors属性决定,所以调优时可以适当地修改processors值。

2.2.3、processorBufferChunk属性

processorBufferChunk属性指定每次分配SocketDirectBuffer的默认值为4096个字节,也会影响BufferPool的长度,如果一次性获取的字节过多而导致Buffer不够用,则会经常出现警告,可以适当调大processorBufferChunk值。

2.2.4、sequnceHandlerType属性

初始化MySQL前后端连接所涉及的一些属性如下。

·packetHeaderSize:指定MySQL协议中的报文头长度,默认值为4个字节。

·maxPacketSize:指定MySQL协议可以携带的数据的最大大小,默认值为16MB。

·charset:初始化连接字符集,默认为utf8。

·txIsolation:初始化前端连接事务的隔离级别,后续的txIsolation值为客户端的配置值。默认值为REPEATED_READ,对应的数字为3。

2.2.6、心跳属性

2.2.7、分布式事务开关属性

handleDistributedTransactions是分布式事务开关:0为不过滤分布式事务;1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤);2为不过滤分布式事务,但是记录分布式事务日志。主要用于控制是否允许跨库事务,配置如下:

0

2.2.8、useOffHeapForMerge属性

该属性用于配置是否启用非堆内存处理跨分片结果集,1为开启,0为关闭,Mycat从1.6版本开始支持此属性。配置如下:

2.2.9全局表一致性检测

其原理是通过在全局表中增加_MYCAT_OP_TIME字段来进行一致性检测,为BIGINT类型。create语句通过Mycat执行时会自动加上这个字段,其他情况下需要手工添加。1为开启、0为关闭,Mycat从1.6版本开始支持此属性。配置如下:

全局表一致性检测功能的使用说明及步骤如下。

(1)在所有全局表中增加一个BIGINT类型的内部列,列名为_mycat_op_time(altertabletaddcolumn_mycat_op_timebigint[notnulldefault0]),同时建议在该列建立索引(altertabletaddindex_op_idx(_mycat_op_time))。

(2)在对全局表进行crud时,可以将内部列当作不存在,建议不要对内部列进行update、insert等操作,否则会在Log日志中出现警告语句“不用操作内部列”。

(3)因为全局表中多了一个内部列,所以在对全局表进行insert时必须带有列名,意味着SQL插入的语句必须是insertintot(id,name)values(xx,xx),而不能使用insertintotvalues(xx,xx),否则会报列数不对的异常。这样的操作可能给开发工程师带来不便,将来会改善这个问题。

2.2.10、useSqlStat属性

开启SQL实时统计,1为开启、0为关闭。配置如下:

3、schema.xml配置文件

schema.xml作为Mycat中重要的配置文件之一,涵盖了Mycat的逻辑库、表、分片规则、分片节点及数据源。

3.1、schema标签

如上所示配置了两个不同的逻辑库,逻辑库的概念等同于MySQL数据库中的Database概念,我们在查询逻辑库中的表时,需要切换到该逻辑库下才可以查询其中的表。

3.1.1、dataNode属性

该属性用于绑定逻辑库到具体的Database上,

3.1.2、checkSQLschema属性

当该值设置为true时,如果我们执行语句**select*fromTESTDB.travelrecord;**,则Mycat会把schema字符去掉,把SQL语句修改为**select*fromtravelrecord;**可避免发送到后端数据库执行时报“**(ERROR1146(42S02):Table'testdb.travelrecord'doesn'texist)”错误。

不过,即使设置该值为true,如果语句所带的schema名字不是schema指定的名字,例如**select*fromdb1.travelrecord;**,那么Mycat并不会删除db1这个字符串。如果没有定义该库,则会报错,在SQL语句中最好不带这个字段。

3.1.3、sqlMaxLimit属性

当该属性设置为某个数值时,每次执行的SQL语句如果没有加上limit语句,MyCat也会自动在limit语句后面加上对应的数值。例如设置值为100,则执行**select*fromTESTDB.travelrecord;**的效果和执行**select*fromTESTDB.travelrecordlimit100;**的效果一样。

如果不设置该值,则Mycat默认会把查询到的信息全部返回,所以在正常使用的过程中还是建议设置该值,避免过多的数据返回。

当然,如果在SQL语句中也显式地指定了limit的大小则不受该属性的约束。需要注意的是,如果运行SQL语句的schema为非拆分库的,那么该属性不会生效,需要手动在SQL语句后面添加limit。

3.2、table标签

table标签定义了Mycat中的逻辑表,所有需要拆分的表都需要在table标签中定义。

3.2.1、name属性

定义逻辑表的名称,如同我们在数据库中执行createtable语句的表名一样,同一个schema标签中定义的table的名字必须唯一。

3.2.2、dataNode属性

定义逻辑表所属的dataNode,该属性的值需要与dataNode标签中name属性的值相互对应。如果需要定义过多的dn,则可以使用如下方法减少配置

3.2.3、rule属性

该属性用于指定逻辑表要使用的规则的名字,规则的名字在rule.xml中定义,必须与tableRule标签中name属性的值一一对应。

3.2.4、ruleRequired属性

该属性用于指定表是否绑定分片规则,如果配置为true,但没有配置具体的rule,则程序会报错。

3.2.5、primaryKey属性

逻辑表对应真实表的主键,例如:分片的规则是使用非主键进行分片,那么在使用主键查询时,就会发送查询语句到所有配置的dn上;如果使用该属性配置真实表的主键,那么Mycat会缓存主键与具体dn的信息,再次使用主键进行查询时就不会进行广播式的查询了,而是直接把SQL语句发送到具体的dn。但是尽管配置了该属性,如果缓存并没有命中,则还是会把该SQL语句发送给所有的dn执行来获得数据。

3.2.6、type属性

该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和“普通表”两种类型。

·全局表:type的值是global,代表全局表。

·普通表:不指定该值为global的所有表。

3.2.7、autoIncrement属性

MySQL对于非自增长主键使用last_insert_id()是不会返回结果的,只会返回0。所以,只有对定义了自增长主键的表使用last_insert_id()才可以返回主键的值。Mycat目前提供了自增长主键功能,但是如果对应的MySQL节点上的表没有定义auto_increment,那么在Mycat层调用last_insert_id()也是不会返回结果的。

由于insert操作时没有带入分片键,所以Mycat会先取下这个表对应的全局序列,然后赋值给分片键。

如果要使用这个功能,则最好配合数据库模式的全局序列。使用autoIncrement="true"指定这个表使用自增长主键,这样Mycat才不会抛出“分片键找不到”的异常。使用autoIncrement="false"来禁用这个功能,autoIncrement的值默认为false。

3.2.8、needAddLimit属性

所以,添加该属性后Mycat将会自动为我们在查询语句后面加上LIMIT100。如果语句中有limit限制,则不会重复添加。该属性默认为true,你也可以把该值设置为false来禁用默认的行为。

3.3、childTable标签

childTable标签用于定义E-R分片的子表,通过标签上的属性与父表进行关联。

3.3.1、name属性

定义子表的名称。

3.3.2、joinKey属性

插入子表时会使用这个值查找父表存储的数据节点。

3.3.3、parentKey属性

parentKey为与父表建立关联关系的列名。程序首先获取joinKey的值,再通过parentKey属性指定的列名产生查询语句,通过执行该语句得知父表存储在哪个分片上,从而确定子表存储的位置。

3.3.4、primaryKey属性

同table标签所描述的。

3.3.5、needAddLimit属性

3.4、dataNode标签

dataNode标签定义了Mycat中的数据节点,也就是我们通常所说的数据分片。一个dataNode标签就是一个独立的数据分片。

如下所示为使用名为localhost1的数据库实例上的db1物理数据库组成一个数据分片,我们通过名字dn1标识这个分片。

3.4.1、name属性

定义数据节点的唯一名字,我们需要在table标签上应用这个名字,来建立表与分片的对应关系。

3.4.2、dataHost属性

该属性用于定义该分片所属的数据库实例,属性值引用自dataHost标签上定义的name属性。

3.4.3、database属性

该属性用于定义该分片所属数据库实例上的具体的库,这里使用两个维度来定义分片:实例+具体的库。因为每个库上的表结构是一样的,所以这样就可以轻松地对表进行水平拆分。

3.5、dataHost标签

作为schema.xml中的最后一个标签,该标签在Mycat逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离和心跳语句。

writeType="0"dbType="mysql"dbDriver="jdbc"switchType="1"slaveThreshold="100">selectuser()password="root">

3.5.1、name属性

唯一标识dataHost标签,供上层标签使用。

3.5.2、maxCon属性

指定每个读写实例连接池的最大连接数。内嵌标签writeHost、readHost都会使用这个属性的值来实例化连接池的最大连接数。

3.5.3、minCon属性

指定每个读写实例连接池的最小连接数,初始化连接池的大小。

3.5.4、balance属性

负载均衡类型,目前的取值有如下4种。

·balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

·balance="1":全部的readHost与standbywriteHost都参与select语句的负载均衡,简而言之,当为双主双从模式(M1→S1,M2→S2,并且M1与M2互为主备)时,在正常情况下,M2、S1和S2都参与select语句的负载均衡。

·balance="2":所有的读操作都随机地在writeHost、readHost上分发。

·balance="3":所有的读请求都随机分发到writeHost对应的readHost上执行,writeHost不负担读压力,注意balance=3只在Mycat1.4及之后的版本中有,在Mycat1.3中没有。

3.5.5、writeType属性

负载均衡类型目前的取值有两种。

·writeType="0":所有的写操作都发送到配置的第1个writeHost上,writeHost1挂了则切到writeHost2上,重新恢复writeHost1节点后,不会再切回来,还是以writeHost2为准,切换记录在配置文件dnindex.properties中。

·writeType="1":所有的写操作都随机地发送到配置的writeHost上,Mycat1.5版本以后不再推荐使用该值。

3.5.6、switchType属性

·-1表示不自动切换。

·1为默认值,表示自动切换。

·2表示基于MySQL主从同步的状态决定是否切换,心跳语句如下:

·3表示基于MySQLGalaryCluster的切换机制(适合集群,Mycat1.4.1及以上版本支持),心跳语句如下:

3.5.7、tempReadHostAvailable属性

如果配置了writeHost属性,下面的readHost依旧可用,则默认值为0。

3.6、heartbeat标签

这个标签内指明了用于后端数据库进行心跳检查的语句。

3.7、writeHost标签、readHost标签

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost也将不可用;另一方面,Mycat会自动检测到writeHost宕机,并切换到备用的writeHost上。

3.7.1、host属性

用于标识不同的实例,对于writeHost,我们一般使用*M1;对于readHost,我们一般使用*S1。

3.7.2、url属性

后端实例的连接地址,如果使用native的dbDriver,则一般为address:port形式;如果使用JDBC或其他dbDriver,则需要特殊指定。在使用JDBC时,则可以写为jdbc:MySQL://localhost:3306/。

3.7.3、user属性

后端存储实例的用户名。

3.7.4、password属性

后端存储实例的密码。

3.7.5、weight属性

在readHost中作为读节点的权重(Mycat在1.4版本以后才有)。

3.7.6、usingDecrypt属性

同server.xml中usingDecrypt的配置。

4、sequence配置文件

在实现分库分表的情况下,数据库自增主键已经无法保证在集群中是全局唯一的主键,因此,Mycat提供了全局sequence,并且提供了本地配置、数据库配置等多种实现方式。

4.1、本地文件方式

采用该方式,Mycat将sequence配置到classpath目录的sequence_conf.properties文件中。

在sequence_conf.properties文件中做如下配置:

HOTNEWS.HISIDS=HOTNEWS.MINID=1001HOTNEWS.MAXID=2000HOTNEWS.CURID=1000

其中HISIDS表示使用过的历史分段(一般无特殊需要则可不配置),MINID表示最小的ID值,MAXID表示最大的ID值,CURID表示当前的ID值。

要启用这种方式,则首先需要在server.xml中配置如下参数:

注意:sequnceHandlerType配置为0,表示使用本地文件方式。

insertintotable1(id,name)values(nextvalueforMYCATSEQ_GLOBAL,'test');

采用这种方式的缺点是Mycat重新发布后,配置文件中的sequence会恢复到初始值;优点是本地加载且读取速度较快。

4.2、数据库方式

在数据库中创建一张名为sequence的表,有sequence的当前值(current_value)、步长(incrementint类型,指每次读取多少个sequence,假设为K)等信息。

sequence的获取步骤如下。

(1)初次使用sequence时,根据传入的sequence名称,从数据库表中读取current_value、increment到Mycat中,并将数据库中的current_value修改为current_value+increment的值。

(2)Mycat将读取到的current_value+increment作为本次使用的sequence值,在下次使用时,sequence自动加1,当使用increment次后,执行与步骤1相同的操作。

(3)Mycat负责维护这张表,用到那些sequence时,只需要在这张表中插入一条记录即可。若某次读取的sequence没有用完系统就宕机了,则本次已经读取sequence且未使用的值将会被丢弃。

要启用这种方式,则需要在server.xml中配置如下参数:

1

注意:sequnceHandlerType需要配置为1,表示使用数据库方式生成sequence。

数据库配置如下:

(1)创建存放MYCAT_SEQUENCE的表:

createtableMYCAT_SEQUENCE(namevarchar(50)notnull,current_valueintnotnull,incrementintnotnulldefault100,primarykey(name))engine=InnoDB;

name、current_value和increment分别是sequence的名称、当前value和增长步长。increment可理解为Mycat从数据库中批量读取100个(默认值)sequence来使用,用完这些值后,再从数据库中读取。

插入一条sequence语句:

insertintoMYCAT_SEQUENCE(name,current_value,increment)values('GLOBAL',100000,100)

4.4、其他方式

4.4.1、使用catlet注解方式

4.4.2、也可以使用ZooKeeper方式实现

4.5、自增长主键

Mycat自增长主键和返回生成主键ID的实现如下:

(1)MySQL本身对非自增长主键使用last_insert_id()只会返回0。

(2)MySQL对定义自增长的主键才可以用last_insert_id()返回主键的值。

Mycat目前提供了自增长主键功能,但是如果对应的MySQL节点上的数据表没有定义auto_increment,那么在Mycat层调用last_insert_id()也是不会返回结果的。

正确的配置方式如下:

(1)MySQL定义自增长主键。

(2)Mycat定义主键自增。

在table标签中增加autoIncrement="true":

(3)Mycat对应sequence_db_conf.properties增加相应的设置。

(4)在数据库的mycat_sequence表中增加TABLE1表的sequence记录。

5、zk-create.yaml配置文件

在介绍配置之前,先介绍几个概念。MycatZone指的是分布于不同地域(Zone)的MycatCluster,Zone的命名建议用地理位置来标识,比如北京联通机房1。Cluster是Mycat集群,一个Cluster包含一个或多个MycatServer。一般来讲,一个Zone都有一组主备Mycat负载均衡器LB,LB与同一中心内的MycatCluster组成一对多关系,即一个LB可以服务一个中心内的所有Cluster的负载均衡请求,也可以是多个LB,每个负担不同的MycatCluster的流量。此外,建议每个LB都有一个Backup,Backup平时并不连接MycatCluster,但监测到LBMaster下线以后,就立即开始连接MycatCluster并开始工作。它们的关系大概可以用一组箭头来表示:Zone→MycatCluster→MycatServer→MySQL,如图所示:

THE END
1.MyCat我的猫咪手游MyCat我的猫咪安卓预约下载最新手机正版链接MyCat我的猫咪游戏简介 游戏信息建设中 分类: 休闲益智 九游APP | 版本:8.1.13.2 | 更新时间:2024-11-06 | 权限详情 | 隐私政策 同类推荐 我的猫咪哪去了 0人预约 九游预约 我的虚拟猫咪 0人预约 九游预约 ?我的猫呢MyCat 0人预约 九游预约 我的收养猫咪 0人预约 九游预约 我的可爱猫咪 0人预约 九...https://www.wandoujia.com/download/416668/
2.Mycat2:Mycat2是Mycat社区开发的一款分布式关系型数据库(中间件...GVPMycatOne/Mycat2 加入Gitee 与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :) 免费加入 已有帐号?立即登录 main 克隆/下载 git config --global user.name userName git config --global user.email userEmail 分支142 标签58 ...https://gitee.com/MycatOne/Mycat2
3.MyCat使用教程本文以实际操作为主,理论性比较少,主要包含mycat安装,mysql主从复制,mycat垂直分库,mycat水平分表等系列操作,希望对有机会接触到mycat的朋友一些启发。 mycat安装 1、安装mysql5.7并导入数据 使用Navicat导入以下数据。 shop_db.sql 2、下载并解压mycat https://www.jianshu.com/p/32e0f2dfcaf5
4.MyCAT+MySQL搭建高可用企业级数据库集群MyCAT高可用部署 MyCAT实现MySQL读写分离 MyCAT集群架构 MyCAT管理及监控 MyCAT集群优化 MyCAT的限制及扩展 MyCAT简化数据库分片集群与部署难度 精准掌握MyCAT核心技术,改变的不仅仅是技术专业度更是你的自身价值 解决工作中数据库的高并发瓶颈 应对DBA面试中的数据库性能考察点 满足企业常见业务数据库集群处理 ...https://coding.imooc.com/class/208.html
1.域名Mycat.io待售Mycat.io 正在出售! 排列方式 Top Domain Sellers 获取此域名 现支付全数USD $ 9,988,或选择先租后买的方案 立即购买 USD $ 9,988 先租后买 USD $ 250 /月 ) ) )安全支付 买方保护计划 开始简单的转移 简单的支付 简单安全的购买域名方式 不论您想购买或出租什么类型的域名,我们都会让转移变得简单安全...http://www.mycat.io/
2.MyCatThe MyCAT projectis an open-source toolset for managing MySQL/Linux servers, and could be helpful for anyone managing a network of *nix servers, whether running MySQL Cluster, "standard" replication, or not running MySQL at all. rep_monandbinlog_monare the MySQL-centric aspects of MyCAT, ...https://mycat.sourceforge.net/
3.MyCat——安装与配置数据分库分表从这里开始,我们就是在初步搭建 MyCat 服务器。我们想要初步实现的目标:MyCat 中配置虚拟数据库、虚拟数据库表,物理库和物理表暂时不拆分 启动MyCat 使用客户端连接到 MyCat而让MyCat 连接物理库、配置虚拟库、虚拟表都需要在 schema.xml 中配置。①配置文件位置...https://blog.csdn.net/YR_112233/article/details/123546869
4.手把手教你配置SpringBoot和MyCatMyCat 是一个开源的数据库中间件,通常用于数据库分库分表的场景,具有良好的性能和可扩展性。本篇文章将手把手教你如何配置 Spring Boot 和 MyCat,帮助你搭建一个高可用、高性能的数据库架构。我们将一步步讲解如何在 Spring Boot 项目中集成 MyCat,并进行数据库路由配置。https://www.jcwlyf.com/newsContent-id-20868.html
5.Mycat无法连接MySQL的解决方法(mycat不能连接mysql)在使用Mycat作为数据库中间件时,可能会遇到无法连接到MySQL数据库的情况。这种情况通常表现为连接超时或者权限拒绝等错误信息。下面我们来分析可能导致这种情况的原因,并提供相应的解决方法。 常见原因 网络问题:Mycat与MySQL数据库服务器之间的网络连接可能存在问题。 配置错误:Mycat的配置文件可能存在错误,如数据库连接...http://mysql.zaixianjisuan.com/jiqiao/mycatwu-fa-lian-jie-mysqlde-jie-jue-fang-fa.html
6.MyCat概述与基本概念腾讯云开发者社区对于开发人员,可以这样理解 MyCat: MyCat 就是一个近似等于 MySql 的数据库库服务,你可以使用连接 MySql 的方式连接MyCat。绝大多数情况,你也可以使用常用的ORM框架连接 MyCat,但是,对于分片的表,还是建议使用标准 SQL 语句,这样能够达到最佳的性能。 https://cloud.tencent.com/developer/article/2384056
7.超Cutecat!超Cute cat! 朗维科Lanwk 黑粉可爱猫 高级玻璃背板,手感超好强磁吸充电,超方便! 按键孔位,超精准! #lanwk手机壳 #lanwk磁吸手机壳 #LANWK #我的手机壳长这样 #数码配件分享 #苹果15质感手机壳 #苹果16磁吸手机壳 朗唯科 LANWK 玻璃材质 黑粉可爱猫 防摔磁吸手机壳 适用苹果 iphone14/15/16/pro/promax...https://m.dewu.com/note/trend/details?id=251512808
8.harper权威猫主名单14.A Day in the Life of a Cat Lady: Harpers' Diary 15.The Furry Files: Exploring the World through Cats Eyes, as told by harperr. 16.harpers' Meow Musings 17.Felines and Fancy Things: A Blog by harperr. 18.Kitty Love Letters to My Furry Friend from harpper. ...https://www.kuaisup.com/jing-dian-wang-ming/890465.html
9.Mycat基础知识·MyCat入门到精通·看云先创建一个mycat用户,然后搭建jdk1.7以上版本的java环境!下载mycat并且安装,修改配置然后启动mycat。 wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz&&tar xzf oneinstack-full.tar.gz&&http://resources.sir6.cn/oneinstack/install.sh--apache_option1--tomcat_option2--jdk_option2--pureftpd...https://www.kancloud.cn/mali1711/dashuju/834658
10.Windows配置mycat这里的test是登录mycat的用户和密码 schema.xml: schema的配置应与您当地安装的mysql有关: “2”是您当地mysql的分库名称, “3”是您本地mysql的账号密码, “1”是mycat和本地mysql表的关联配置,table是表名,datanode是哪些分库中有test表。我的三个分库都有test表,所以都配置了。rule是test表的执行规则,规则...https://www.tulingxueyuan.cn/tlzx/jsp/2696.html
11.Mycat学习实战Mycat基本功能51CTO博客Mycat心跳机制通过检测 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master>slaveThreshold时,读写分离筛选器会过滤掉此Slave机器。 http://ygqygq2.blog.51cto.com/1009869/1974299