最近从同事那边了解到一些数据库主从读写分离,分片的工具。叫mycat。然后就写下这篇入门博客简单的说一下和mycat有关的内容吧。
mysql5.7。安装2个,做好主从配置。如果不会可以参照我之前的文章docker安装mysql以及主从配置
mycat下载。从mycat官网,上面有本mycat权威指南挺好用的
我使用mycat的原因是它对于代码的没有侵入,相比大家也都看过java的一些主从分离和分片的方案,就是配置多数据源,到用到主库的时候,就调用主库的连接。需要用到从库的时候,就调用从库的连接。
但是使用mycat之后,他相当于给数据库外面再做一层。你每次调用sql语句,等于先到mycat中,mycat再分发到需要操作的数据库中。
例如,一个表根据id分成了10个表。但是实际上在程序员看来,需要写的代码并不需要变化。还是操作一个表。只不过是配置好的mycat的逻辑表,它会给你分发到对应物理表中。
mycat的主要配置其实就在于3(或者说4)个文件的配置
分别是:
server.xml
说明:mycat最基本的配置,配置连接的数据库和用户
schema.xml
说明:mycat中逻辑表的具体配置
rule.xml
说明:
mycat中逻辑表需要分片的分片规则的配置文件
以及一个具体的分片规则txt文件。我这边命名为chen.txt
注意开启主从后这些操作只要在主库进行就可以,从库会自动同步
创一张不需要分片的数据库test,然后创一张表做例子
CREATE TABLE `test`.`test1`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(20), PRIMARY KEY (`id`) );
然后创建需要分片的表的数据库,创建10个数据库,分别是db1-db10。做分片表的数据库位置。
druidparser
8066
mycat
test
mycat
test
true
select user()
添加
id
chen-test
chen.txt
0-10=0
10-20=1
20-30=2
30-40=3
40-50=4
50-60=5
60-70=6
70-80=7
80-90=8
90-100=9
表示主键id为0-10的在db1,11-20的在表bd2操作
win系统,打开bin/startup_nowrap.bat这个文件,提示mycat server startup successfully。
表示启动成功
打开数据库工具,我用的是sqlyog,配置是locathost/mycat/mycat/8066
然后就可以看到之前创建好的test库中的test表了,然后对test进行相应操作就可以
然后我们需要创建需要分片的表
CREATE TABLE `test2` ( `id` BIGINT(20) NOT NULL, `name` VARCHAR(100) DEFAULT NULL, `date` DATE DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
INSERT INTO test2 (`id`, `name`, `date`) VALUES ('10', '2', '2018-05-28')#插入测试数据
SELECT * FROM test2
创建test2表的时候可以看到,db1-10中,都创建了表test2
然后通过sqlyog连接实际的数据库,发现如果插入对应的数据的时候,1-10会被mycat插入到db1中,11-20会被插入到db2中,以此类推
其次就是查询。mycat会自动把分片表中的数据整合在一起显示出来。这样mycat的配置就算完毕了。
然后在读写分离这边。可以试着关闭主库,进行读操作(select),发现操作都去了从库。关闭从库,进行写操作(delete,update,inser),发现操作都去了主库。
只需要配置安装好一个zookeeper,已经在网页中对数据库做好相应的连接配置即可。非常简单,就不多叙述了。