环境
- 操作系统:CentOS 7
- Mysql版本:Mysql8
- Mycat版本:Mycat1.6.7.6
- host_1:127.0.0.1
- host_2:127.0.0.2
方式
- 方式一:为了方便,可以先通过Mysql账户使用图形化工具Navicat在两台主机不同的Msql服务里创建好数据库及数据表,然后再修改Mycat配置文件,将对应的数据库及数据表配置好
- 方式二:提前再Mycat配置文件配置好数据库及数据表,通过Mycat服务去创建,Mycat会帮你自动将不同的数据表创建到配置对应的物理主机的Mysql服务下
- 注意:若要通过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表关系