先说一下datahost这是用来配置是的数据库服务信息的,一个datahost中可能有多个服务器,这些服务器可能会分担读写任务,如果这样,那么可能需要做服务器的主从设计。
datanode用来做数据分片的,mycat会根据分片规则将数据写入datanode对应的数据库中,不同的datanode中可以使用相同的datahost。
用mycat一直是用编号作为分片依据,最近一个项目中数据库结构不适合以自增编号做分片依据,并且要求加入新数据库服务器之后不能中断服务,经过对现有数据分析,所有表都有一个添加时间字段,那么我们决定用这个字段来按月分片存储数据。这里要先说一下,按月分片的话并不会将数据分布到12个datanode中,而是每年的每个月对应一个datanode,也就是2018年1-12月对应12个datanode,2019年1-12月又对应12个datanode,也就是每一年就需要用到12个datanode。当然你可以将同一个datahost放到不同的datanode中。初期可以根据服务器数量添加node,到node用完后可以添加node节点。文件结构如下:
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="park" checkSQLschema="false" sqlMaxLimit="100"> <!-- auto sharding by id (long) --> <table name="cars" dataNode="dn$1,dn2,dn3,dn4,dn5,dn6,dn7,dn8,dn9" rule="sharding-by-month" /> <!-- global table is auto cloned to all defined data nodes ,so can join with any table whose sharding node is in the same data node --> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> --> <dataNode name="dn1" dataHost="212-3306" database="park" /> <dataNode name="dn2" dataHost="212-3307" database="park" /> <dataNode name="dn3" dataHost="212-3308" database="park" /> <dataNode name="dn4" dataHost="212-3309" database="park" /> <dataNode name="dn5" dataHost="212-3306" database="park" /> <dataNode name="dn6" dataHost="212-3307" database="park" /> <dataNode name="dn7" dataHost="212-3308" database="park" /> <dataNode name="dn8" dataHost="212-3309" database="park" /> <dataNode name="dn9" dataHost="212-3309" database="park" /> <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" /> <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" /> <dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" /> <dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> --> <dataHost name="212-3306" maxCon="100" 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.0.212:3306" user="root" password="123456"> </writeHost> </dataHost> <dataHost name="212-3307" maxCon="100" 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="hostM2" url="192.168.0.212:3307" user="root" password="123456"> </writeHost> </dataHost> <dataHost name="212-3308" maxCon="100" 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="hostM3" url="192.168.0.212:3308" user="root" password="123456"> </writeHost> </dataHost> <dataHost name="212-3309" maxCon="100" 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="hostM4" url="192.168.0.212:3309" user="root" password="123456"> </writeHost> </dataHost> </mycat:schema>
修改完文件后可以使用命令载入配置:
mysql -uroot -p123456 -P 9066 -h 127.0.0.1 进入管理后台
输入:reload @@config_all;载入新配置文件即可。