水平分表
分片即水平切分,可以将一张大表切分成多个子表部署到不同机器上从而进行拓展。
当在配置MySQL读写分离需要先进行主从配置,而如果要进行分片操作则需要将主从取消。如果不取消,主数据库的操作会同步到从数据库,到不到分片的效果。
这里同样使用mycat进行水平分表,下面开始分片实战演示
在mycat安装目录./mycat/conf编辑scheme.xml文件(下附注释
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--配置逻辑数据库-->
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100">
<!--把各个分片所在数据源配置进去-->
<table name="test1" dataNode="dn1, dn2" rule="auto-sharding-long"/>
</schema>
<!--可以理解为数据源-->
<!--此处database实际数据库名-->
<dataNode name="dn1" dataHost="host1" database="test" />
<dataNode name="dn2" dataHost="host2" database="test" />
<!--分片1所在实体数据库-->
<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.126.151:3306" user="root" password="root"/>
</dataHost>
<!--分片2所在实体数据库-->
<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="192.168.126.152:3306" user="root" password="root"/>
</dataHost>
</mycat:schema>
值得注意,table标签有个rule属性,这里指定了数据库分片规则。
在scheme.xml的同级目录下存在rule.xml文件,这里是自带了一些分片规则
上面我们配置的auto-sharding-long
便可在这里找到, 其中algorithm
指明了划分算法,colums
指明了对哪个字段执行划分算法。
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
再往下找会看到ran-long的实现
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
关注点在autopartition-long.txt(在conf目录下),打开,可以在里面配置分片信息。
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0 # 第1个分片
500M-1000M=1 # 第2个分片
综合前面的column列,那分片规则就是:id值在0-500M的在第一个分片,id值在500M-1000M在第二个分片,M为10000。
当然,并不是每个algorithm都需要引入配值文件,也可以直接在property标签中指定,具体有哪些属性可以查看对应的java类。
到此,数据库分片就已经完成了。