环境

  • 操作系统:CentOS 7
  • Mysql版本:Mysql8
  • Mycat版本:Mycat1.6.7.6
  • host_1:127.0.0.1
  • host_2:127.0.0.2

方式

  1. 方式一:为了方便,可以先通过Mysql账户使用图形化工具Navicat在两台主机不同的Msql服务里创建好数据库及数据表,然后再修改Mycat配置文件,将对应的数据库及数据表配置好
  2. 方式二:提前再Mycat配置文件配置好数据库及数据表,通过Mycat服务去创建,Mycat会帮你自动将不同的数据表创建到配置对应的物理主机的Mysql服务下
  3. 注意:若要通过Mycat1.x版本建表,只能使用建表SQL,Mycat1.x不支持使用Navicat直接建表,这里是指不支持通过Navicat登陆Mycat服务,然后直接创建表,但是可以通过Navicat登陆Mycat

分库配置

修改 schema 配置文件

简单分库配置文件完整示例

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1" dataNode="dn1">
<table name="customer" dataNode="dn2" ></table>
</schema>
<dataNode name="dn1" dataHost="host1" database="orders" />
<dataNode name="dn2" dataHost="host2" database="orders" />

<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://127.0.0.1:3306" user="root"
password="123456">
</writeHost>
</dataHost>

<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM2" url="jdbc:mysql://127.0.0.2:3306" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>

配置解释

如果通过方式二去创建表,只有创建表明为:customer的时候,Mycat会自动帮你把表创建到对应的dn2的Host2主机配置的Mysql服务,创建其他的任意表,都将默认创建到dn1对应的Host1主机配置的Mysql服务

关于操作

开发者只需要通过操作Mycat服务去操作数据,不需要关心数据在哪个服务器哪个库中,比如你的后端你是Java,只需要将配置数据库的地方改为mycat的服务即可,CRUD和正常操作Mysql一样即可 比如

jdbc:mysql://127.0.0.1:8066/TESTDB...后面省略
  • 8066:Mycat服务默认端口
  • TESTDB:Mycat配置文件server.xml中配置的逻辑库名

注意事项

如果使用Mycat1.x版本进行分库操作,需要注意跨库目前不支持JOIN操作,分表不分库Mycat1.6.7.6亲测默认支持JOIN操作,无须配置ER表关系