在上述3台数据库中创建数据库 db01 ,create database db01;
1.schema 定义逻辑库
2.schema 中的table定义逻辑表
server.xml配置文件包含了MyCat的系统配置信息,主要有两个重要的标签:system、user。
主要配置MyCat中的系统配置信息,对应的系统配置项及其含义,如下:
属性
|
取值
|
含义
|
charset
|
utf8
|
设置 Mycat 的字符集 , 字符集需要与 MySQL 的字符集保持一致
|
nonePasswordLogin
|
0,1
|
0 为需要密码登陆、 1 为不需要密码登陆 , 默认为0 ,设置为 1 则需要指定默认账户
|
useHandshakeV10
|
0,1
|
使用该选项主要的目的是为了能够兼容高版本的jdbc 驱动 , 是否采用
HandshakeV10Packet 来与 client 进行通信, 1: 是 , 0: 否
|
useSqlStat
|
0,1
|
开启 SQL 实时统计 , 1 为开启 , 0 为关闭 ; 开启之后, MyCat 会自动统计 SQL 语句的执行情况 ; mysql -h 127.0.0.1 -P 9066 -u root -p 查看 MyCat 执行的 SQL, 执行效率比较低的SQL , SQL 的整体执行情况、读写比例等 ; show @@sql ; show
@@sql.slow ; show @@sql.sum ;
|
useGlobleTableCheck
|
0,1
|
是否开启全局表的一致性检测。 1 为开启 , 0为关闭 。
|
sqlExecuteTimeout
|
1000
|
SQL 语句执行的超时时间 , 单位为 s ;
|
sequnceHandlerType
|
0,1,2
|
用来指定 Mycat 全局序列类型, 0 为本地文件,1 为数据库方式, 2 为时间戳列方式,默认使用本地文件方式,文件方式主要用于测试
|
sequnceHandlerPattern
|
正则表达式
|
必须带有 MYCATSEQ 或者 mycatseq 进入序列匹配流程 注意MYCATSEQ_ 有空格的情况
|
subqueryRelationshipCheck
|
true,false
|
子查询中存在关联查询的情况下 , 检查关联字段中是否有分片字段 . 默认 false
|
useCompression
|
0,1
|
开启 mysql 压缩协议 , 0 : 关闭 , 1 : 开启
|
fakeMySQLVersion
|
5.5,5.6
|
设置模拟的 MySQL 版本号
|
defaultSqlParser
|
由于 MyCat 的最初版本使用了 FoundationDB的SQL 解析器 , 在 MyCat1.3 后增加了 Druid解析器, 所以要设置 defaultSqlParser 属性来指定默认的解析器; 解析器有两个 :
druidparser 和 fdbparser, 在MyCat1.4之后 , 默认是 druidparser,
fdbparser 已经废除了
|
|
processors
|
1,2....
|
指定系统可用的线程数量 , 默认值为 CPU 核心 x 每个核心运行线程数量 ; processors 会影响processorBufferPool, processorBufferLocalPercent,
processorExecutor 属性 , 所有 , 在性能调优时, 可以适当地修改 processors 值
|
processorBufferChunk
|
指定每次分配 Socket Direct Buffer 默认值为4096 字节 , 也会影响 BufferPool 长度 ,如果一次性获取字节过多而导致buffer 不够用, 则会出现警告 , 可以调大该值
|
|
processorExecutor
|
指定 NIOProcessor 上共享 businessExecutor固定线程池的大小 ; MyCat把异步任务交给 businessExecutor 线程池中, 在新版本的 MyCat 中这个连接池使
用频次不高 , 可以适当地把该值调小
|
|
packetHeaderSize
|
指定 MySQL 协议中的报文头长度 , 默认 4 个字节
|
|
maxPacketSize
|
指定 MySQL 协议可以携带的数据最大大小 , 默认值为16M
|
|
idleTimeout
|
30
|
指定连接的空闲时间的超时长度 ; 如果超时 , 将关闭资源并回收, 默认 30 分钟
|
txIsolation
|
1,2,3,4
|
初始化前端连接的事务隔离级别 , 默认为REPEATED_READ , 对应数字为 3READ_UNCOMMITED=1; READ_COMMITTED=2;REPEATED_READ=3;
SERIALIZABLE=4;
|
sqlExecuteTimeout
|
300
|
执行 SQL 的超时时间 , 如果 SQL 语句执行超时 ,
将关闭连接 ; 默认 300 秒 ;
|
serverPort
|
8066
|
定义 MyCat 的使用端口 , 默认 8066
|
managerPort
|
9066
|
定义 MyCat 的管理端口 , 默认 9066
|
1.schema.xml
select user()
select user()
select user()
2.server.xml
123456
DB01
123456
DB01
true
上述的配置表示,定义了两个用户 root 和 user ,这两个用户都可以访问 DB01 这个逻辑库,访 问密码都是123456,但是root用户访问DB01逻辑库,既可以读,又可以写,但是 user用户访问DB01逻辑库是只读的。
cd /usr/local/mycat/
#启动
bin/mycat start
#停止
bin/mycat stop
mysql -h 192.168.2.3 -P 8066 -uroot -p123456
CREATE TABLE TB_ORDER (
id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL ,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
INSERT INTO TB_ORDER(id,title) VALUES(1,'goods1');
INSERT INTO TB_ORDER(id,title) VALUES(2,'goods2');
INSERT INTO TB_ORDER(id,title) VALUES(3,'goods3');
INSERT INTO TB_ORDER(id,title) VALUES(1,'goods1');
INSERT INTO TB_ORDER(id,title) VALUES(2,'goods2');
INSERT INTO TB_ORDER(id,title) VALUES(3,'goods3');
INSERT INTO TB_ORDER(id,title) VALUES(5000000,'goods5000000');
INSERT INTO TB_ORDER(id,title) VALUES(10000000,'goods10000000');
INSERT INTO TB_ORDER(id,title) VALUES(10000001,'goods10000001');
INSERT INTO TB_ORDER(id,title) VALUES(15000000,'goods15000000');
INSERT INTO TB_ORDER(id,title) VALUES(15000001,'goods15000001');
经过测试,我们发现,在往 TB_ORDER 表中插入数据时:
如下图效果