Mycat(Windows環境)(1) 初入門
Mycat 是SQL集羣中間件,基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和性能
1. MyCat準備
- 安裝 mysql
安裝jdk 1.8
這是 jdk 下載地址.
安裝完成,配好環境變量
下載maycat
這是 mycat 下載地址.
mycat 下載目錄
2. 數據庫準備
create database db1;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
username varchar(32) NOT NULL default '',
passwork varchar(32) NOT NULL default '',
time DATETIME NOT NULL default '1971-01-01 01:00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
create database db2;
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
oid varchar(32) NOT NULL default '',
money decimal(19,4) NOT NULL default 0,
state TINYINT NOT NULL default 0,
time DATETIME NOT NULL default '1971-01-01 01:00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
create database db3;
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
oid varchar(32) NOT NULL default '',
money decimal(19,4) NOT NULL default 0,
state TINYINT NOT NULL default 0,
time DATETIME NOT NULL default '1971-01-01 01:00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
3. MyCat配置
MyCat配置 官方文檔.
mycat 的配置文件在conf下:
- 爲實現下圖:
配置如下:
- server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="defaultSqlParser">druidparser</property>
<property name="mutiNodeLimitType">1</property>
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
</system>
<!-- mycat 的用戶名,密碼,數據庫 -->
<user name="test">
<property name="password">123456</property>
<property name="schemas">JGDB</property>
</user>
<user name="user">
<property name="password">123456</property>
<property name="schemas">JGDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
- rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="order_rule">
<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">2</property>
</function>
</mycat:rule>
- schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 設置表的存儲方式.schema name="JGDB" 與 server.xml中的 JGDB 設置一致 -->
<schema name="JGDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="users" primaryKey="id" dataNode="db1" />
<table name="orders" primaryKey="id" dataNode="db2,db3" rule="order_rule" />
</schema>
<!-- 設置dataNode 對應的數據庫,及 mycat 連接的地址dataHost -->
<dataNode name="db1" dataHost="host1" database="db1" />
<dataNode name="db2" dataHost="host1" database="db2" />
<dataNode name="db3" dataHost="host1" database="db3" />
<!-- mycat 邏輯主機dataHost對應的物理主機.其中也設置對應的mysql登陸信息 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat></heartbeat>
<writeHost host="server1" url="127.0.0.1:3306" user="root" password="xinfu978"/>
</dataHost>
</mycat:schema>
4. 測試
- 使用 navicat連接 mycat
插入users表數據測試
- 往users 插入兩個用戶
- 查看物理庫 db1 的users表是否有數據
測試成功
- 插入order表數據測試(是否id單數在db3,雙數在db2)
往orders 插入4條數據
- 查看物理庫 db2,db3 的 orders 表是否有對的數據
–db2 數據符合
–db3 數據符合