转载自 https://blog.csdn.net/smilefyx/article/details/72810531
1.首先在Mycat官网下载安装包,这里就以最新的1.6版本为例,下载地址为: http://dl.mycat.io/1.6-RELEASE/
2.解压完成后,主要编辑的配置文件在conf目录下,分别为schema.xml、rule.xml、server.xml、sequence_db_conf.properties四个文件。
schema.xml主要配置物理数据库的信息,逻辑数据库名称以及表和路由策略之间的关系等;
rule.xml主要配置路由策略、拆分规则等;
server.xml主要配置逻辑数据库的信息,包括用户名、密码、端口等,也是代码中数据库连接的地址;
sequence_db_conf.properties主要配置主键自增说明。
3.server.xml 设置登陆 mycat 的用户名,密码,数据库
<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
4.rule.xml
<tableRule name="mod-long"> <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>
定义路由策略mod-long,该策略对分表的id进行mod2除法,对模3算法的结果进行分库
5.schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="company" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" /> </schema> <dataNode name="dn1" dataHost="localhost1" database="db1" /> <dataNode name="dn2" dataHost="localhost1" database="db2" /> <dataNode name="dn3" dataHost="localhost1" database="db3" /> <dataHost name="localhost1" maxCon="1000" 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="localhost:3306" user="root" password="root"> </writeHost> </dataHost> </mycat:schema>
5.2、创建数据库
按照schema.xml配置中的示例,我们需要建立分别名为db1、db2、db3的数据库。链接mysql,建立相关的数据库:
create database db1 character set utf8;
create database db2 character set utf8;
create database db3 character set utf8;
5.3、链接数据库
使用数据库链接工具或命令。本文使用navicat链接数据库。使用navicat链接数据库时的主要参数配置如下:
端口号:8066
用户名和密码可以查看mycat conf目录中的server.xml中的定义,本文使用的是默认的root,123456来连接,连接成功后只能操作名为TESTDB的数据库;
5.4、全局表的测试
使用navicat打开命令列界面。输入如下命令创建数据表:
USE TESTDB;
create table company(id int not null primary key,name varchar(100));
之后使用如下命令查看创建表命令的执行状态:
explain USE TESTDB;
create table company(id int not null primary key,name varchar(100));
因为company在schema.xml中北定义为了全局表,所以正常情况下可以看到如下类似结果:
dn1 create table company(id int not null primary key,name varchar(100))
dn2 create table company(id int not null primary key,name varchar(100))
dn3 create table company(id int not null primary key,name varchar(100))
3 rows in set
紧接着我们尝试执行如下命令执行一条插入数据的操作:
insert into company(id,name) values(1,'leader usgh');
insert into company(id,name) values(2,'leader us5');
insert into company(id,name) values(3,'leader usq');
insert into company(id,name) values(4,'leader us2');
insert into company(id,name) values(5,'leader us2');
insert into company(id,name) values(6,'leader us56');
insert into company(id,name) values(7,'leader us3');
insert into company(id,name) values(8,'leader us1');
之后我们直接登录到mysql服务器分别查看db1、db2、db3三个数据库,可以看到数据库中都创建了名为company的数据表,同时表中都按id平均插入了数据。