mycat具体配置介绍
<h4>1.mycat文件目录说明</h4>
<table>
<thead>
<tr>
<th>bin</th>
<th>mycat命令,启动、重启、停止等</th>
</tr>
</thead>
<tbody>
<tr>
<td>catlet</td>
<td>catlet为Mycat的一个扩展功能</td>
</tr>
<tr>
<td>conf</td>
<td>Mycat 配置信息,重点关注</td>
</tr>
<tr>
<td>lib</td>
<td>Mycat引用的jar包,Mycat是java开发的</td>
</tr>
<tr>
<td>logs</td>
<td>Mycat引用的jar包,Mycat是java开发的</td>
</tr>
</tbody>
</table>
<h4>2.配置</h4>
<p>Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件说明:</p>
<table>
<thead>
<tr>
<th>server.xml</th>
<th>Mycat的配置文件,设置账号、参数等</th>
</tr>
</thead>
<tbody>
<tr>
<td>schema.xml</td>
<td>Mycat对应的物理数据库和数据库表的配置</td>
</tr>
<tr>
<td>rule.xml</td>
<td>Mycat分片(分库分表)规则</td>
</tr>
</tbody>
</table>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/5a35048d70e2f1812608f2f5beb571e0?showdoc=.jpg" alt="" />
服务器 IP 说明</p>
<table>
<thead>
<tr>
<th>Mycat</th>
<th>192.168.1.40 mycat服务器,连接数据库时,连接此服务器</th>
</tr>
</thead>
<tbody>
<tr>
<td>database1</td>
<td>192.168.1.41 物理数据库1,真正存储数据的数据库</td>
</tr>
<tr>
<td>database2</td>
<td>192.168.1.42 物理数据库2,真正存储数据的数据库</td>
</tr>
<tr>
<td>database3</td>
<td>192.168.1.44 物理数据库3,真正存储数据的数据库</td>
</tr>
<tr>
<td>database4</td>
<td>192.168.1.45 物理数据库4,真正存储数据的数据库</td>
</tr>
</tbody>
</table>
<p>使用Mycat后,连接数据库是不变的,默认端口是8066</p>
<h5>3.server.xml</h5>
<p>式例</p>
<pre><code><user name="test">
<property name="password">test</property>
<property name="schemas">lunch</property>
<property name="readOnly">false</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user></code></pre>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>user</td>
<td>用户配置节点</td>
</tr>
<tr>
<td>name</td>
<td>登录的用户名,也就是连接Mycat的用户名</td>
</tr>
<tr>
<td>password</td>
<td>登录的密码,也就是连接Mycat的密码</td>
</tr>
<tr>
<td>schemas</td>
<td>数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs</td>
</tr>
<tr>
<td>privileges</td>
<td>配置用户针对表的增删改查的权限</td>
</tr>
</tbody>
</table>
<p>我这里配置了一个账号test 密码也是test,针对数据库lunch,读写权限都有,没有针对表做任何特殊的权限。2、privileges标签
对用户的 schema以及表进行精细化的DML权限控制</p>
<privileges check="false">
</privileges>
<p>--check 表示是否开启DML权限检查。默认是关闭。server.dtd文件中 <!ELEMENT privileges (schema)*> 说明可以有多个schema的配置。
--dml 顺序说明:insert,update,select,delete</p>
<pre><code><schema name="db1" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema></code></pre>
<p>db1的权限是update,select。
tb01的权限是啥都不能干。
tb02的权限是insert,update,select,delete。
其他表默认是udpate,select。</p>
<ol>
<li>system标签
这个标签内嵌套的所有 property 标签都与系统配置有关。
<property name="charset">utf8</property>
<p>字符集</p>
<property name="processors">1</property>
<p>处理线程数量,默认是cpu数量。</p></li>
</ol>
<property name="processorBufferChunk">4096</property>
<p>每次读取留的数量,默认4096。</p>
<property name="processorBufferPool">409600</property>
<p>创建共享buffer需要占用的总空间大小。processorBufferChunk<em>processors</em>100。</p>
<property name="processorBufferPoolType">0</property>
<p>默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。</p>
<property name="processorBufferLocalPercent">100</property>
<p>二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。</p>
<property name="sequnceHandlerType">100</property>
<p>全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。</p>
<property name="useCompression">1</property>
<p>是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。</p>
<property name="packetHeaderSize">4</property>
<p>指定 Mysql 协议中的报文头长度。默认 4。</p>
<property name="maxPacketSize">16M</property>
<p>指定 Mysql 协议可以携带的数据最大长度。默认 16M。</p>
<property name="idleTimeout">1800000</property>
<p>指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。</p>
<property name="txIsolation">3</property>
<p>前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;</p>
<property name="sqlExecuteTimeout">300</property>
<p>SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。</p>
<property name="processorCheckPeriod">1000</property>
<p>清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单
位毫秒。</p>
<property name="dataNodeIdleCheckPeriod">300000</property>
<p>对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。</p>
<property name="dataNodeHeartbeatPeriod">10000</property>
<p>对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。</p>
<property name="bindIp">0.0.0.0</property>
<p>mycat 服务监听的 IP 地址,默认值为 0.0.0.0。</p>
<property name="serverPort">8066</property>
<p>定义 mycat 的使用端口,默认值为 8066。</p>
<property name="managerPort">9066</property>
<p>定义 mycat 的管理端口,默认值为 9066。</p>
<property name="fakeMySQLVersion">5.6</property>
<p>mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。</p>
<property name="useSqlStat">0</property>
<p>是否开启实时统计。1为开启;0为关闭 。</p>
<property name="useGlobleTableCheck">0</property>
<p>是否开启全局表一致性检测。1为开启;0为关闭 。</p>
<property name="handleDistributedTransactions">0</property>
<p>分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。</p>
<property name="maxStringLiteralLength">65535</property>
<p>默认是65535。 64K 用于sql解析时最大文本长度
以上举例的属性仅仅是一部分,可以配置的变量很多,具体可以查看SystemConfig这个类的属性内容。
System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。</p>
<ol>
<li>Firewall标签
顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
<firewall>
<whitehost>
<host host="127.0.0.1" user="mycat"/>
<host host="127.0.0.2" user="mycat"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
<p>设置很简单,很容易理解,只要设置了白名单,表示开启了防火墙,只有白名单的连接才可以进行连接。</p></li>
</ol>
<h5>5 schema.xml</h5>
<p>schema.xml是最主要的配置项,首先看我的配置文件。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/842b552697a7d16eb641fa807ede74c4?showdoc=.jpg" alt="" /></p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>schema</td>
<td>数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应</td>
</tr>
<tr>
<td>dataNode</td>
<td>分片信息,也就是分库相关配置</td>
</tr>
<tr>
<td>dataHost</td>
<td>物理数据库,真正存储数据的数据库</td>
</tr>
</tbody>
</table>
<p>schema:</p>
<table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>逻辑数据库名,与server.xml中的schema对应</td>
</tr>
<tr>
<td>checkSQLschema</td>
<td>数据库前缀相关设置,建议看文档,这里暂时设为false</td>
</tr>
<tr>
<td>sqlMaxLimit</td>
<td>select 时默认的limit,避免查询全表</td>
</tr>
</tbody>
</table>
<p>table:</p>
<table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>表名,物理数据库中表名</td>
</tr>
<tr>
<td>dataNode</td>
<td>表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name</td>
</tr>
<tr>
<td>primaryKey</td>
<td>主键字段名,自动生成主键时需要设置</td>
</tr>
<tr>
<td>autoIncrement</td>
<td>是否自增</td>
</tr>
<tr>
<td>rule</td>
<td>分片规则名,具体规则下文rule详细介绍</td>
</tr>
</tbody>
</table>
<p>dataNode:</p>
<table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>节点名,与table中dataNode对应</td>
</tr>
<tr>
<td>datahost</td>
<td>物理数据库名,与datahost中name对应</td>
</tr>
<tr>
<td>database</td>
<td>物理数据库中数据库名</td>
</tr>
</tbody>
</table>
<p>dataHost:</p>
<table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>物理数据库名,与dataNode中dataHost对应</td>
</tr>
<tr>
<td>balance</td>
<td>均衡负载的方式</td>
</tr>
<tr>
<td>writeType</td>
<td>写入方式</td>
</tr>
<tr>
<td>dbType</td>
<td>数据库类型</td>
</tr>
<tr>
<td>heartbeat</td>
<td>心跳检测语句,注意语句结尾的分号要加。</td>
</tr>
</tbody>
</table>
<p>首先得搞清楚,balance项是控制读而writeType是控制写的
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/14aa366d81943d72d047dfc913907736?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/b834bf4d333bfd237f8ba72896d36737?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/009995c284afcb5a3420942aa4945f9a?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/b3ce84e572a7391ae18d16a9a9625cc2?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/cc132c13a2fbd3c0f427d611dbb6e3be?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/06c3b5d97619e16e20090a6c869c6bb7?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/09df4287b22b3312e91eaf1e2689ce30?showdoc=.jpg" alt="" /></p>