Mycat 01--基本概念和配置
1.配置详解
-
server.xml
# user 标签主要用于定义登录 Mycat 的用户和权限
<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB,userdb,orderdb</property>
<property name="readOnly">false</property>
</user>
# 在schema.xml 中定义的逻辑库,必须先在server.xml中定义,要访问多个schema用逗号隔开。
system 标签主要用来定义系统相关配置。(下面buffer中存放的是什么值?)
Mycat 中有两个主要的buffer pool:BufferPool ,ThreadLocalPool。BufferPool 使用ThreadLocalPool 作为二级缓存,
每次从bufferPool中获取时都会优先获取ThreadLocalPool 中的buffer值,如果未命中则获取BufferPool中的值。
ThreadLocalPool 是每个线程内部使用。BufferPool 是每个NIOProcessor 共享的。
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全局表一致性检测、0为关闭 -->
通过在全局表中添加_MYCAT_OP_TIME 字段来进行一致性检测。因为多了一个内部列,因此对全局表进行insert 时必须带有列名。
即:insert into tab1(id,name) values (1,'louis');
- schema.xml
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
# schema 标签定义mycat中的逻辑库,可以定义多个。用多个schema标签划分。此案例中只有一个逻辑库TESTDB,默认创建的表会在dn1上。
# 以下各个表绑定到dn2,dn3对应的具体database上。
# checkSQLschema 如果是设置为true:select * from TESTDB.company;mycat 会把TESTDB去掉。
# sqlMaxLimit:只是对于分库分表的表起作用。默认是开启needAddLimit 参数,如果查询返回的结果很多就会自动加上limit 100;
<!-- auto sharding by id (long) --> <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /> <!-- random sharding using mod sharind rule --> <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" /> <table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile"> <childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id"> <childTable name="order_items" joinKey="order_id" parentKey="id" /> </childTable> <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" parentKey="id" /> </table>
# 定义了mycat中的逻辑表,所有要拆分的表都需要在table标签中定义。物理库中也要有与之对应的表名。比如employee(后面有示例)
# Primary key属性:逻辑表对应的真实表的主键。一般来说分片使用的是非主键作为分片键,在使用主键查询时,就会发送查询语句到所有的分片dn上。
# mycat 会缓存主键与具体dn的信息,下次查询时就不会全局广播,直接把SQL语句发送到对应的dn上。 </schema>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
## datanode 标签 和 datahost 标签
# datanode 用于绑定逻辑库到具体的database上,此案例绑定了dn1,对应的实际物理数据库为db1.一个dn只能对应一个物理database。
1 <dataNode name="dn1" dataHost="localhost1" database="db1" /> 2 <dataNode name="dn2" dataHost="localhost1" database="db2" /> 3 <dataNode name="dn3" dataHost="localhost1" database="db3" />
7 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" 8 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 9 <heartbeat>select user()</heartbeat> 10 <!-- can have multi write hosts --> 11 <writeHost host="hostM1" url="10.1.3.67:3606" user="mycat" password="123456"> 12 <!-- can have multi read hosts --> 13 <readHost host="hostS2" url="10.1.3.69:3606" user="mycat" password="123456" /> 14 </writeHost> 15 <writeHost host="hostS1" url="10.1.3.68:3606" user="mycat" password="123456" /> 16 </dataHost> 17 18 # write type:0---所有的写操作发送到第一个配置的writehost上,writehost1 挂了切换到writehost2 上,重新恢复writehost1 后不会切换回来。切换记录在dbindex.properties文件中 21 22 # switch type:1 为默认值,表示自动切换。 -1 表示不自动切换。 23 2 表示基于主从状态决定是否切换。show slave status; 25 3 基于Mysql Galary Cluster 切换。show status like 'wsrep%'; 27 28 # 如果writehost 对应的数据库宕机了,会切换到备用的writehost,但是则该writehost绑定的所有readhost也不可用。
浙公网安备 33010602011771号