目录
零:MyCat 单库分表,事实证明是个坑,不能 join 不知道能用来干嘛。
三:修改 schema.xml 逻辑库的配置 主要配置的是逻辑库,逻辑表,数据节点,和实际数据源之间的关系
零:MyCat 单库分表,事实证明是个坑,不能 join 不知道能用来干嘛。
具体的操作流程如下:
ー:下载
目前只有 1.6.5版本 以上支持单库分表。
下载,解压使用即可。
解压后,修改配置文件,在 mycat/conf 下
二:修改 server.xml MyCat 服务级别的配置
MyCat 的配置文件,设置账号、参数等
<!-- mycat的8066 端口连接的用户名,密码,逻辑数据库名 -->
<user name="lsq" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mydb</property>
</user>设置 user name,password 及 schemas; 主要做的功能就是 逻辑库与用户 做映射。
name 和 password 在连接代理数据库 MyCat 时使用;
schemas 是逻辑库,要和 schema.xml 里的 schema name 对应。
三:修改 schema.xml 逻辑库的配置 主要配置的是逻辑库,逻辑表,数据节点,和实际数据源之间的关系
MyCat 逻辑数据库、表的映射关系,MySQL 数据节点、所属物理数据库的映射关系。
MyCat 对应的物理数据库和数据库表的配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- name: 逻辑数据库名 -->
<schema name="mydb" checkSQLschema="false" sqlMaxLimit="100">
<!-- name: 表名,分表主键,子表,数据节点,分表规则 -->
<table name="submeter" primaryKey="id" autoIncrement="true" subTables="submeter$1-3" dataNode="dn1" rule="modlong"/>
</schema>
<!-- database:物理数据库名 -->
<dataNode name="dn1" dataHost="localhost1" database="mydb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.85.128:3306" user="lsq" password="********">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.85.130:3306" user="lsq" password="********" />
</writeHost>
</dataHost>
</mycat:schema>schema name 要和 server.xml 对应上,既多个用户拥有对该逻辑库的权限。
<schema name="mydb">city表 设置分表三张,单库多表只能设置一个 datanote,rule 采用取模模式 mod-long 取模分片。
<table name="submeter" primaryKey="id" autoIncrement="true" subTables="submeter$1-3" dataNode="dn1" rule="modlong"/>writeHost 和 readHost 可以设为同一数据库。上述配置为主从库。相关配置详见:MySQL 配置主从
四:修改 rule.xml
MyCat 分片(分库分表)规则. mod-long 取模分片 取模列为 id 取模算法为 mod-long
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>此次选用默认的 mod-long 规则,只需修改 count 数,修改 property count 等于 3。这样,配置已经完成。
五:修改 MySQL 数据库
先在 MySQL 库上,建 3 张表,submeter1-3。如下图,从库中也创建了三张一样的表。

六:启动 MyCat
启动:
./mycat start查看启动状态:
./mycat status停止:
./mycat stop重启(改变上面的 xml 配置不用重启,管理端可以重新载入):
./mycat restart查看 logs/ 下的 wrapper.log 和 mycat.log 可以查看运行时问题和异常。
MyCat 启动日志:
cat ./logs/wrapper.logMyCat应用日志:
cat ./logs/mycat.log
七:测试
mysql 创建 mydb 数据库,submeter1, submeter2, submeter3 三张表。
连接 mycat, 端口:8066,账号:lsq, 密码:******** // 对应 server 表中的 user 标签
执行 sql 语句,查看执行过程。
EXPLAIN
insert into submeter(id, l, s, q) VALUES (3, 'l3', 's3','q3')可查看执行过程路由到物理表 submeter1 表上:

打开 mysql 中的 mydb 数据库 submeter1 表可看到数据:

其他:错误
运行 MyCat 时提示以下错误:
代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: server1: server1: nodename nor servname provided, or not known
解决办法:
linux 环境下
vim /etc/hosts
win 环境下
C:\Windows\System32\drivers\etc 替换方案, 复制修改, 替换
将 127.0.0.1 localhost 改成 127.0.0.1 localhost server1