server.xml Mycat的配置文件,设置账号、参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则
server.xml==============================================================================
serverPort 3306服务端口
nanagerPort 9066管理端口
nonePasswordLogin 0需要密码 1不需要密码
bindIp 绑定IP
txIsolation 隔离级别
processors 进程数,通常等于cpu核数
权限设置,user用户对TESTDB中的tb01、tb02表的具体权限
<user name="user"> <property name="password">123456</property> <property name="schemas">TESTDB</property> <privileges check="false"> <schema name="TESTDB" dml="0110" > <!--默认权限--> <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> </user>
dml 对应的4个字符含义依次是 insert/update/select/delete
可以查看mycat配置的用户,可以直接看到mysql的密码
<property name="password">123456</property>
我们可以通过java命令来加密
cd /usr/local/Mycat/lib
java -cp Mycat-server-1.6.5-release.jar io.mycat.util.DecryptUtil 0:root:123456
0:表示前端应用
<property name="usingDecrypt">1</property> <property name="password">加密密码</property>
mysql -uroot -p -P9066 -h127.0.0.1
log4j2.xml==============================================================================
日志输出格式以及输出日志格式
<asyncRoot level="info" includeLocation="true">
ALL < Trace < Debug < Info < Warn < Error < Fatal < OFF
rule.xml==============================================================================
水平分片规则,分片规则所对应的分片函数
<tableRule name="rule1"> <rule> <columns>id</columns> <!--分片列--> <algorithm>func1</algorithm> <!--分片函数算法--> </rule> </tableRule> <function name="func1" class="io.mycat.route.function.PartitionByLong"> <property name="partitionCount">8</property> <property name="partitionLength">128</property> </function>
常用分片算法
PartitionByMod 简单取模,比如以customer_id为分片,取模分片放入db1和db2中
<tableRule name="customer_login"> <rule> <columns>customer_id</columns> <!--分片列--> <algorithm>mod-long</algorithm> <!--分片函数算法--> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <property name="count">2</property> </function>
PartitionByHashMod 哈希取模
<tableRule name="customer_login"> <rule> <columns>login_name</columns> <!--分片列--> <algorithm>mod-long</algorithm> <!--分片函数算法--> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByHashMod"> <property name="count">2</property> </function>
PartitionByFileMap 分片枚举,不如根据areaid按照区域分片
<tableRule name="hash_int"> <rule> <columns>area_id</columns> <!--分片列--> <algorithm>mod-long</algorithm> <!--分片函数算法--> </rule> </tableRule> <function name="hash_int" class="io.mycat.route.function.PartitionByFileMap"> <property name="mapFile">partition-hash-int.txt</property> <property name="type">0</property> <!--0:INT 非0:string--> <property name="defaultNode">0</property> <!-->=0:启用默认节点 <0:不启用--> </function>
conf目录下创建partition-hash-int.txt
10000=0
10001=1
DEFAULT_NODE=0
PartitionByPrefixPattern 字符串范围取模(如订单号后五位分片等)
<!--mod((ASCII('J') + ASCII(a)), 128) = 43--> <tableRule name="sharding-by-prefix-parttern"> <rule> <columns>login_name</columns> <!--分片列--> <algorithm>mod-long</algorithm> <!--分片函数算法--> </rule> </tableRule> <function name="sharding-by-prefix-parttern" class="io.mycat.route.function.PartitionByPrefixPattern"> <property name="patternValue">128</property> <!--取模基数--> <property name="prefixLenth">2</property> <!--login_name头两个字符--> <property name="mapFile">prefix-partition-pattern.txt</property> </function>
prefix-partition-pattern.txt
0-63=0
64-127=1
schema.xml==============================================================================
逻辑库逻辑表配置,逻辑表所存储的数据节点配置以及物理数据库配置
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
sqlMaxLimit 限制返回结果集的行数,-1表示关闭limit限制
如果没有指定,那么就会使用server.xml中的限制
dataNode 定义逻辑表存储的物理数据库
<dataHost name="mysql0103" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> <heartbeat>select user()</heartbeat> <writeHost host="192.168.1.2" url="192.168.1.2:3306" user="root" password="123456"> <readHost host="192.168.1.3" url="192.168.1.3:3306" user="root" password="123456" /> </writeHost> </dataHost>
balance 0:不开启读写分离
1:全部的readHost与stand by writeHost参与select语句的负载均衡
2:所有的readHost与writeHost都参与select语句的负载均衡
3:所有readHost参与select语句的负载均衡,writeHost不负担读压力
writeType 0:写请求到第一个写主机
1:随机写主机
switchType 1:默认值,自动切换
2:基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
3:基于MySQL galary cluster的切换机制(适合集群)
-1:不自动切换
heartbeat 检查后端数据库是否可用
示例
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="customer_login" primaryKey="customer_id" dataNode="logindb01,logindb02" rule="customer_login" /> </schema> <dataNode name="logindb01" dataHost="mysql01" database="login_db01" /> <dataNode name="logindb02" dataHost="mysql02" database="login_db02" /> <dataHost name="mysql0103" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> <heartbeat>select user()</heartbeat> <writeHost host="192.168.1.2" url="192.168.1.2:3306" user="root" password="123456"> <readHost host="192.168.1.3" url="192.168.1.3:3306" user="root" password="123456" /> </writeHost> <writeHost host="192.168.1.3" url="192.168.1.3:3306" user="root" password="123456" /> </dataHost> </mycat:schema>
访客评论