MyCat簡單使用與配置

基本配置

  • 1 . 在mycat/conf目錄下,MyCat核心配置文件:schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <!-- 定義一個MyCat的模式,邏輯數(shù)據(jù)庫名稱TestDB -->
        <!-- “checkSQLschema”:描述的是當(dāng)前的連接是否需要檢測數(shù)據(jù)庫的模式 -->
        <!-- “sqlMaxLimit”:表示返回的最大的數(shù)據(jù)量的行數(shù) -->
        <!-- “dataNode="dn1"”:該操作使用的數(shù)據(jù)節(jié)點是dn1的邏輯名稱 -->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
        <!-- 定義數(shù)據(jù)的操作節(jié)點 -->
        <!-- “dataHost="localhost1"”:定義數(shù)據(jù)節(jié)點的邏輯名稱 -->
        <!-- “database="mldn"”:定義數(shù)據(jù)節(jié)點要使用的數(shù)據(jù)庫名稱 -->
        <dataNode name="dn1" dataHost="localhost1" database="mldn" />
        <!-- 定義數(shù)據(jù)節(jié)點,包括了各種邏輯項的配置 -->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <!-- 配置真實MySQL與MyCat的心跳 -->
            <heartbeat>select user()</heartbeat>
            <!-- 配置真實的MySQL的連接路徑 -->
            <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="123456"></writeHost>
        </dataHost>
</mycat:schema>
  • 2 . dataHost標(biāo)簽上屬性釋義:
    • balance:負(fù)載均衡類型
      • 0:不開啟讀寫分離機制,所有讀操作都發(fā)送到當(dāng)前可用的writeHost上
      • 1:全部的readHost與stand by writeHost參與select語句的負(fù)載均衡,
      • 2:所有讀操作都隨機在writeHost、readHost上分發(fā)
      • 3:所有讀請求隨機分發(fā)到writeHost對應(yīng)的readHost執(zhí)行,writeHost不負(fù)擔(dān)讀壓力
    • writeType:負(fù)載均衡類型
      • 0:所有寫操作發(fā)送到配置的第一個writeHost,當(dāng)?shù)谝粋€writeHost宕機時,切換到第二個writeHost,重新啟動后以切換后的為準(zhǔn),切換記錄在配置文件:dnindex.properties
      • 1:所有寫操作都隨發(fā)送到配置的writeHost
      • 2:尚未實現(xiàn)
    • switchType:切換方式
      • -1:不自動切換
      • 1:自動切換(默認(rèn))
      • 2:基于MySql主從同步的狀態(tài)來決定是否切換

讀寫分離

一. MycSQL主從配置
  • 1 . 前提:多臺MySQL服務(wù)器主機的時間是同步的,否則無法實現(xiàn)主從配置

  • 2 . MASTER修改MySQL配置文件vim /usr/local/mysql/my.cnf

log-bin=mysql-bin-1 : 表示配置同步的bin的文件名稱,不同的主從關(guān)系組,名稱不同
server_id=196 : 表示MySQL服務(wù)的編號,這個編號一般取IP的最后一位,也可自定義

  • 3 . MASTER啟動MySQL服務(wù)nohup mysqld_safe --user=root > /dev/null 2>&1 &
  • 4 . MASTER 登陸MySQL數(shù)據(jù)庫:mysql -uroot -p123456,查看master狀態(tài)show master stats;

其中
File(tid_set) : 表示主機名稱(mysql-bin-1.000001)
Position : 表示同步的節(jié)點位置

  • 5 . MASTER建立同步用戶:sync_user
GRANT REPLICCATION SLAVE,REPLICATION CLIENT ON *.* TO 'sync_user'@'192.168.1.%' IDENTIFIED BY '123456';
flush privileges;
  • 6 . SLAVE修改MySQL配置文件vim /usr/local/mysql/my.cnf

log-bin=mysql-bin-1 : 表示配置同步的bin的文件名稱,不同的主從關(guān)系組,名稱不同
server_id=168 : 表示MySQL服務(wù)的編號,這個編號一般取IP的最后一位,也可自定義

  • 7 . MASTER/SLAVE : 若服務(wù)已經(jīng)啟動,需要刪除自動配置的編號文件,否則無法同步rm /usr/local/mysql/data/auto.cnf
  • 8 . SLAVE 啟動MySQL服務(wù)nohup mysqld_safe --user=root > /dev/null 2>&1 &
  • 9 . SLAVE 登陸MySQL數(shù)據(jù)庫:mysql -uroot -p123456
  • 10 . SLAVE進行主從關(guān)系配置
  • 若此時已經(jīng)啟動了從主機,必須先停止:stop slave;
  • 停止之后還想重新啟動,必須清楚所有的日志信息: flush logs;
  • 定義master主機:
change master to master_host='192.168.1.128',master_user='sync_user',master_password='123456',master_log_file='mysql-bin-1.000001',master_log_pos=435 ;

master_host表示mast的主機ip
master_user表示可同步的賬號
master_password表示同步賬號的密碼
master_log_file表示MASTERshow master stats;查看時的File(tid_set)
master_log_pos表示MASTERshow master stats;查看時的Position

  • 啟動slave:start slave;
  • 查詢當(dāng)前從主機狀態(tài):show slave status\G;
  • 若出現(xiàn)以下代碼表示已經(jīng)啟動完成
Slave_IO_Running:YES
Slave_SQL_Running:Yes
二. MyCat讀寫分離配置
  • 1 . 修改MyCat的schema.xml文件vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <!-- 定義一個MyCat的模式,邏輯數(shù)據(jù)庫名稱TestDB -->
        <!-- “checkSQLschema”:描述的是當(dāng)前的連接是否需要檢測數(shù)據(jù)庫的模式 -->
        <!-- “sqlMaxLimit”:表示返回的最大的數(shù)據(jù)量的行數(shù) -->
        <!-- “dataNode="dn1"”:該操作使用的數(shù)據(jù)節(jié)點是dn1的邏輯名稱 -->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
        <!-- 定義個數(shù)據(jù)的操作節(jié)點,以后這個節(jié)點會進行一些庫表分離使用 -->
        <!-- “dataHost="localhost1"”:定義數(shù)據(jù)節(jié)點的邏輯名稱 -->
        <!-- “database="test"”:定義數(shù)據(jù)節(jié)點要使用的數(shù)據(jù)庫名稱 -->
        <dataNode name="dn1" dataHost="localhost1" database="test" />
        <!-- 定義數(shù)據(jù)節(jié)點,包括了各種邏輯項的配置 -->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <!-- 配置真實MySQL與MyCat的心跳 -->
            <heartbeat>select user()</heartbeat>
            <!-- 配置真實的MySQL的連接路徑 -->
            <writeHost host="hostMaster" url="192.168.1.196:3306" user="root" password="123456">
                <readHost host="hostSlave" url="192.168.1.168:3306" user="root" password="123456"/>
            </writeHost>
        </dataHost>
</mycat:schema>
  • 2 . 對于讀寫分離的配置中:設(shè)置readHost讀?。?code>balance=3,設(shè)置writeHost與ReadHost共同分擔(dān)讀取:balance=2
  • 3 . 啟動MyCat服務(wù):/usr/local/mycat/bin/mycat console
  • 4 . 此時就完成了MyCat讀寫分離的相關(guān)配置

垂直分庫

垂直分庫實際上就是進行多表分庫管理

  • 1 . 分別在多臺MySQL主機上進行多個表的創(chuàng)建
  • 2 . 修改MyCat的配置文件vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
        <schema name="TESTDB2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"/>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.1.199:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host2" url="192.168.1.166:3306" user="root" password="123456"/>
        </dataHost>
</mycat:schema>
  • 3 . 修改MyCat用戶配置文件,將多個數(shù)據(jù)庫配置到server.xmlvim /usr/local/mycat/conf/server.xml
<property name="schemas">TESTDB1,TESTDB2</property>
  • 4 . 啟動MyCat服務(wù)/usr/local/mycat/bin/mycat console
  • 5 . 此時即完成了垂直分庫,數(shù)據(jù)操作時需要指定具體操作的是哪一個數(shù)據(jù)庫

全局表

  • 1 . 全局表的作用:可充當(dāng)數(shù)據(jù)字典表,這張數(shù)據(jù)表會在所有的數(shù)據(jù)庫中存在,但對外而言,只是一個邏輯數(shù)據(jù)庫存在的數(shù)據(jù)表,當(dāng)對該表進行變更操作時,所有數(shù)據(jù)庫的該表都會發(fā)生相應(yīng)的變化
  • 2 . 在多臺MySQL主機上分別建立各自的數(shù)據(jù)字典表
  • 3 . 修改MyCat的核心配置文件vim /usr/local/mycat/conf/schema.xml
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                <table name="dict" primaryKey="did" type="global" dataNode="dn1,dn2"/>
        </schema>
        <schema name="TESTDB1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
        <schema name="TESTDB2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"/>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.1.199:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host2" url="192.168.1.166:3306" user="root" password="123456"/>
        </dataHost>
</mycat:schema>
  • 4 . 修改MyCat的用戶配置文件vim /usr/local/mycat/conf/server.xml,將schema.xml配置的所有邏輯數(shù)據(jù)庫,配置到該配置文件中
<property name="schemas">TESTDB1,TESTDB2,TESTDB</property>
  • 5 . 啟動MyCat服務(wù)/usr/local/mycat/bin/mycat console
  • 6 . 此時就完成了全局表的配置,此時只要對TESTDB該邏輯數(shù)據(jù)庫進行dict表的更新或插入操作,所有的其他數(shù)據(jù)庫(TESTDB1,TESTDB2)上的dict表都會得到更新

水平分庫

  • 一 .常用水平分庫

  • 水平分庫指的是將一個數(shù)據(jù)量龐大的數(shù)據(jù)表分別保存到不同的數(shù)據(jù)庫里,即:現(xiàn)在有多個數(shù)據(jù)庫,這個庫保存同樣結(jié)構(gòu)的數(shù)據(jù)表,這些數(shù)據(jù)根據(jù)MyCat的算法,分別保存到符合自身要求的數(shù)據(jù)庫的數(shù)據(jù)表中,MyCat的分片規(guī)則配置文件在:/usr/local/mycat/conf/rule.xml中,目前常用的分片規(guī)則有:
  • 求模分庫:mod-long
  • 范圍分庫:auto-sharding-long
  • Hash分庫:hash-int
  • 月分庫:sharding-by-month
  • ER模型分庫:childTable
  • 自定義分庫:CustomRule(該方式需要自己實現(xiàn)分庫算法)
  • 二 . 分片規(guī)則:編輯分片規(guī)則文件vim /usr/local/mycat/conf/rule.xml

  • A . 求模分庫
    • rule.xml的配置
<tableRule name="my-mod-long">
        <rule>
                <columns>id</columns>
                <algorithm>mod-long</algorithm>
        </rule>
</tableRule>
<function name="my-mod-long" class="io.mycat.route.function.PartitionByMod">
        <property name="count">3</property><!--求模取余的數(shù)-->
</function>
  • schema.xml配置
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                <table name="data" primaryKey="id" dataNode="dn1,dn2,dn3" rule="my-mod-long"/>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataNode name="dn3" dataHost="localhost3" database="db3" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.1.199:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host2" url="192.168.1.166:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost3" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host3" url="192.168.1.176:3306" user="root" password="123456"/>
        </dataHost>
</mycat:schema>
  • server.xml配置
<property name="schemas">TESTDB</property>
  • 啟動MyCat服務(wù)/usr/local/mycat/bin/mycat console
  • 使用客戶端端口進行連接mysql -uroot -p123456 -h192.168.1.1 -P8066 -DTESTDB
  • 此時,就實現(xiàn)了MyCat的求模分片,每對3進行取余,然后自動進行分片數(shù)據(jù)保存處理
  • 序列的使用:
  • 序列的配置,在usr/local/mycat/conf/sequence_conf.properties文件中
  • 還需要在server.xml文件中配置
  • <property name="sequenceHandlerType">0</property>
  • 在SQL中使用next value for MYCATSEQ_GLOBAL表示序列增長
  • INSERT INTO data (id,title) VALUES (next value for MYCATSEQ_GLOBAL,@@hostname);
  • B . 范圍分庫
    • 范圍分庫指的是,根據(jù)id的范圍進行不同數(shù)據(jù)庫的保存,或者根據(jù)數(shù)據(jù)大小的不同來進行保存
    • rule.xml的配置
<tableRule name="my-auto-sharding-long">
        <rule>
                <columns>id</columns>
                <algorithm>my-auto-sharding-long</algorithm>
        </rule>
</tableRule>
<function name="my-auto-sharding-long" class="io.mycat.route.function.AutoPartitionByLong">
        <property name="mapFile">partition-long.txt</property><!--范圍規(guī)則文件-->
</function>
 - 此時需要定義一個范圍分庫的規(guī)則問津`partition-long.txt`,并存放在`conf`目錄中`vim /usr/local/mycat/conf/partition-long.txt`
 - partition-long.txt

根據(jù)數(shù)據(jù)編號劃分
0-10000=0
10001-20000=1
20001-30000=2

 - 修改`schema.xml`匹配新的分片規(guī)則
<table name="data" primaryKey="id" dataNode="dn1,dn2,dn3" rule="my-auto-sharding-long"/>
  • C . Hash分庫
    • Hash分庫指的是根據(jù)某個字段的的固定內(nèi)容進行分片,例如:根據(jù)省份分片,根據(jù)城市分片,一般進行Hash分片處理的,都要有一些固定的值進行匹配
    • rule.xml配置
<tableRule name="my-by-intfile">
        <rule>
                <columns>title</columns>
                <algorithm>my-hash-int</algorithm>
        </rule>
</tableRule>
<function name="my-hash-int" class="io.mycat.route.function.PartitionByFileMap">
                < property name="type">1</property><!--0表示數(shù)字型分片,1表示字符串分片-->
        <property name="mapFile">partition-hash-int.txt</property><!--Hash規(guī)則文件-->
</function>
- `schema.xml`配置
<table name="data" primaryKey="title" dataNode="dn1,dn2,dn3" rule="my-by-intfile"/>
  • D . 按月分庫
    • 每個月存入每個月單獨的數(shù)據(jù)庫中
    • rule.xml配置
<tableRule name="my-by-month">
        <rule>
                <columns>saledate</columns>
                <algorithm>my-partbymonth</algorithm>
        </rule>
</tableRule>
<function name="my-partbymonth" class="io.mycat.route.function.PartitionByMonth">
                < property name="dateFormat">yyyy-MM-dd</property>
        <property name="sBeginDate">2017-01-01</property>
</function>
- `schema.xml`配置
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                <!--使用$表示通配符-->
                <table name="data" primaryKey="id" dataNode="dn$1-12" rule="my-by-month"/>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataNode name="dn3" dataHost="localhost3" database="db3" />
        <dataNode name="dn4" dataHost="localhost4" database="db4" />
        <dataNode name="dn5" dataHost="localhost5" database="db5" />
        <dataNode name="dn6" dataHost="localhost6" database="db6" />
        <dataNode name="dn7" dataHost="localhost7" database="db7" />
        <dataNode name="dn8" dataHost="localhost8" database="db8" />
        <dataNode name="dn9" dataHost="localhost9" database="db9" />
        <dataNode name="dn10" dataHost="localhost10" database="db10" />
        <dataNode name="dn11" dataHost="localhost11" database="db11" />
        <dataNode name="dn12" dataHost="localhost12" database="db12" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.1.166:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host2" url="192.168.1.199:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost3" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host3" url="192.168.1.116:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost4" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host4" url="192.168.1.150:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost5" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host5" url="192.168.1.152:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost6" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host6" url="192.168.1.177:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost7" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host7" url="192.168.1.136:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost8" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host8" url="192.168.1.153:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost9" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host9" url="192.168.1.159:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost10" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host10" url="192.168.1.176:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost11" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host11" url="192.168.1.156:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost12" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host12" url="192.168.1.136:3306" user="root" password="123456"/>
        </dataHost>
</mycat:schema>
  • E . ER模型分庫
    • 根據(jù)數(shù)據(jù)庫的ER模型進行分庫,即進行多表關(guān)聯(lián)分庫管理
    • schema.xml配置
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                <!--此處表示父表與子表的相互關(guān)聯(lián)-->
                <table name="data" primaryKey="id" dataNode="dn$1-3" rule="my-mod-long">
                        <childTable name="data_details" joinKey="id" primaryKey="ddid" parentKey="id"/>
                </table>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataNode name="dn3" dataHost="localhost3" database="db3" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.122.166:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host2" url="192.168.122.199:3306" user="root" password="123456"/>
        </dataHost>
        <dataHost name="localhost3" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host3" url="192.168.122.198:3306" user="root" password="123456"/>
        </dataHost>
</mycat:schema>
  • F . 自定義分庫規(guī)則
    • 分布式數(shù)據(jù)庫系統(tǒng)中,分片規(guī)則用于定義數(shù)據(jù)與分片的路由關(guān)系,也就是 insert,delete,update,select 的基本 sql 操作中,如何將 sql 路由到對應(yīng)的分片執(zhí)行。
      Mycat 的總體路由圖為:
屏幕快照 2017-04-06 13.55.24.png

屏幕快照 2017-04-06 13.56.24.png

屏幕快照 2017-04-06 13.56.29.png

- 官方案例分析:

屏幕快照 2017-04-06 13.57.36.png

屏幕快照 2017-04-06 13.57.41.png

屏幕快照 2017-04-06 13.57.45.png

屏幕快照 2017-04-06 13.57.50.png

屏幕快照 2017-04-06 13.57.54.png

屏幕快照 2017-04-06 13.58.00.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容