1.下载安装mycat
通过mycat的官网,下载对应的包,我这里选择安装的linux系统的
上传在服务器某一位置,然后在该目录下解压
tar -xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
2.配置mycat
进入 mycat中conf,首先我们需要配置mycat的用户和密码
vi server.xml
找到 user这一栏,默认的应该是123456,本地不改跳过这一步也行,当然服务器上弱口令不是很好..
再修改 schema.xml
vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode='dn01'>
<table name="r_problem" primaryKey="id" dataNode="dn01" rule="rule1" subTables="r_problem$1-3" />
</schema>
<!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->
<dataNode name="dn01" dataHost="dh01" database="recommend" />
<dataNode name="dn02" dataHost="dh01" database="db02" />
<!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->
<dataHost name="dh01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="service" url="127.0.0.1:3306" user="root" password="xxxxxxx"/>
</dataHost>
</mycat:schema>
<schema>
:表示的是在mycat中的逻辑库配置,逻辑库名称为:TESTDB,默认是TESTDB,在schema上的 dataNode可以将对应数据库的表全部拿到TESTDB中。
<table>
:表示在mycat中的逻辑表配置,逻辑表名称为:r_problem
,映射到两个数据库节点dataNode
中,切分规则为:rule1
(在rule.xml配置),subTables 是分表 r_problem$1-3 是分为 r_problem1,r_problem2,r_problem3 三个表,我这里只进行了分表,没有分库,要分库 dataNode="dn01,dn02"选择添加下面配置的dataNode就行。
<dataNode>
:表示数据库节点,这个节点不一定是单节点,可以配置成读写分离.
<dataHost>
:真实的数据库的地址配置
<heartbeat>
:用户心跳检测
<writeHost>
:写库的配置,password是mysql数据库的密码
再修改 rule.xml
vi rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>
</mycat:rule>
count 数一定要和分库分表的结点个数对应,我这里分了3个表,就为3.
3.启动,连接mycat
在mycat 中lib下启动mycat
./bin/mycat { console | start | stop | restart | status | dump } 参数命令
./bin/mycat start 启动
开放8066端口,然后远程连接
这个密码不是mysql的密码,是之前配置mycat的密码
如果你 2003 连接失败,./bin/mycat status 检查是否启动 ,又 ./bin/mycat console检查原因
我遇到的问题在这篇博客解决了.
https://blog.csdn.net/qq_43268365/article/details/86542764
连接成功后
可以修改TESTDB名字,然后在之前的xml改名字.我就默认没改了..
简单测试下
INSERT INTO r_problem(id,xxx) value ('x','x'),('x','x'),('x','x');
然后在连接你的mysql,数据应该就存入了mysql中的r_problem1-3中的某一个表,默认按照取模来存
注意是在mycat中,SELECT * FROM r_problem 就会得到 三个表的数据集合。
在贴一张recommend原数据库的图,和TESTDB是一样的
4.springboot配置
datasource: druid: url: jdbc:mysql://xxx.xx.xx.xxx:8066/TESTDB?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: xxxxx
把你之前的数据库连接端口改成 8066 ,用户和密码是mycat的,不是之前mysql的.
因为mycat是中间件,之前代码部分不需修改就已经完成了分库分表
值得注意的是
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode='dn01'>
<table name="r_problem" primaryKey="id" dataNode="dn01" rule="rule1" subTables="r_problem$1-3" />
</schema>
如果在schema上没有 dataNode ,就只能操作 table的表,其他表虽然在TESTDB显示,但不能被操作
需要分库分表的表还是需要在table中配置。
来源:CSDN
作者:冷心影翼
链接:https://blog.csdn.net/TextInfo/article/details/104247272