mycat使用之MySQL單庫分表及均分數據


轉載自 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平均插入了數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM