Mycat使用入门Windows环境

 

分类:服务器搭建数据库
标签:windows分库数据库配置mysqlmycat

2020-04-14 13:46:03.0 阅读原文

尝试启动mycat

下载解压后,运行startup_nowrap.bat:

如果报错找不到主类 **/mycat,需要将mycat文件夹放在没特殊字符或空格的路径下。例如,如果放在D:\Program Files\mycat路径下,就会找不到主类Files/mycat。

如果启动没有异常退出即可,日志中还会有一些错误,需要进行下一步配置。

配置用户、权限

在server.xml中,配置如下,默认就有:

<user name="root">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
</user>

<user name="user">
    <property name="password">user</property>
    <property name="schemas">TESTDB</property>
    <property name="readOnly">true</property>
</user>

这里的用户名和密码就可以用来连接mycat服务器。可以使用navicat连接,注意默认端口是8066。

连接成功后,发现有许多表和视图,但是都打不开,这就需要我们下一步的配置。

配置schema、table、节点、主机、分片规则

在schema.xml中:

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
    <!-- mod rule -->
    <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="mod-long" />

    <!-- global table is auto cloned to all defined data nodes ,so can join
        with any table whose sharding node is in the same data node -->
    <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
    <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
        /> -->
</schema>

上面配置了一个数据库TESTDB,两张数据表travelrecord和company,其中company为全局表(global),会在dn1,dn2,dn3三个节点上各存储一份, travelrecord 是需要按照mod-long算法 分节点 存储的表。 mod-long 算法的配置在rule.xml中,后面再说。

节点、主机配置

<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"
          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">
        <!-- can have multi read hosts -->
        <readHost host="hostS2" url="127.0.0.1:3306" user="root" password="root" />
    </writeHost>
   <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>

在一个主机上配置了三个节点:dn1、dn2、dn3,这就是前面配置table时的dataNode。此外readHost可以不用配置,如果配置,需要在mysql层面与writeHost数据同步,即主从复制同步。或者也可以像我这样保持数据同步。

此外,还需要在本地主机创建三个数据库,并在每个数据库都创建company和 travelrecord 表。脚本如下:

CREATE TABLE `company` (
  `id` int(11) NOT NULL,
  `name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `travelrecord` (
  `id` int(11) NOT NULL,
  `name` varchar(64) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置完这些后,重启mycat,刷新navicat,就可以看到数据库只剩下两张表。再使用insert语句,插入测试数据:插入company表的数据,分别复制到了三个本地mysql数据库;插入 travelrecord 时,却报错了。这是因为 travelrecord 表的数据需要分片存储到三个mysql数据库,插入数据时,还需要配置分片存储的规则,需要以下配置。

分片规则

上面配置travelrecord table节点时,指定的rule,在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>

其中,id为travelrecord表的主键,3需要与 travelrecord表 的dataNode个数一致。

配置好这个规则,再执行insert语句,即可插入成功。注意,insert语句不能省略列名,否则会出现以下错误:

[42000][1064] partition table, insert must provide ColumnList

在mycat端执行select语句验证:

再查看本地的三个数据库节点,数据的分布如下:

所以,travelrecord表的数据按照规则分别存储在三个节点对应的数据库表上。


分类:服务器搭建数据库
标签:windows分库数据库配置mysqlmycat

原文链接: Mycat使用入门Windows环境 2020-04-14 13:46:03.0
Mycat使用入门Windows环境  mycat-shi-yong-windowns