bboyjing's blog

Mysql分库分表之Mycat学习笔记六【分片规则--全局表】

业务中基本上都会有字典表,就上我们建立的order表的status字段,字典表一般改动不大,而且所有分片都要用到,这种表适合于Mycat全局表,无需对数据进行切分,只要在所有分片上保存一份数据即可,这样就可以避免跨库join。

修改schema.xml配置

1
<table name="order_status" primaryKey="id" type="global" dataNode="dn1,dn2"/>

添加order_stats表的全局ID修改conf/sequence_conf.properties,添加如下内容

1
2
3
4
ORDER_STATUS.HISIDS=
ORDER_STATUS.CURID=0
ORDER_STATUS.MINID=1
ORDER_STATUS.MAXID=1000000000

重启Mycat

1
2
cd /opt/mycat
./bin/mycat restart

通过Mysql客户端连接Mycat,并新建order_status表

1
2
3
4
5
6
7
8
9
10
11
12
mysql -h127.0.0.1 -P8066 -uroot -pbboyjing
use OrderDB;
mysql> CREATE TABLE order_status (
-> `id` int(11) NOT NULL,
-> `status` tinyint(4) NOT NULL,
-> `desc` varchar(20) NOT NULL,
-> `create_time` bigint(20) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#插入数据
mysql> insert into order_status values(next value for MYCATSEQ_ORDER_STATUS,0,"create order", NOW());
mysql> insert into order_status values(next value for MYCATSEQ_ORDER_STATUS,1,"order accept", NOW());

分别连上dn1和dn2看下数据:
图10

图11
可以很清楚地看出dn1和dn2上有一模一样的数据,然后再进行join查询就很方便了。
图12