MyCat 單庫分表,不能使用 join 操作

目錄

 

零:MyCat 單庫分表,事實證明是個坑,不能 join 不知道能用來幹嘛。

ー:下載

二:修改 server.xml    MyCat 服務級別的配置

三:修改 schema.xml 邏輯庫的配置 主要配置的是邏輯庫,邏輯表,數據節點,和實際數據源之間的關係

四:修改 rule.xml

五:修改 MySQL 數據庫

六:啓動 MyCat

七:測試


零:MyCat 單庫分表,事實證明是個坑,不能 join 不知道能用來幹嘛。

具體的操作流程如下:

 

ー:下載


目前只有 1.6.5版本 以上支持單庫分表。

下載,解壓使用即可。

解壓後,修改配置文件,在 mycat/conf

 

二:修改 server.xml    MyCat 服務級別的配置


MyCat 的配置文件,設置賬號、參數等

<!-- mycat的8066 端口連接的用戶名,密碼,邏輯數據庫名 -->

<user name="lsq" defaultAccount="true">

        <property name="password">123456</property>

        <property name="schemas">mydb</property>

</user>

設置 user namepasswordschemas; 主要做的功能就是 邏輯庫與用戶 做映射。

namepassword 在連接代理數據庫 MyCat 時使用;

schemas 是邏輯庫,要和 schema.xml 裏的 schema name 對應。

 

三:修改 schema.xml 邏輯庫的配置 主要配置的是邏輯庫,邏輯表,數據節點,和實際數據源之間的關係


MyCat 邏輯數據庫、表的映射關係,MySQL 數據節點、所屬物理數據庫的映射關係。

 

MyCat 對應的物理數據庫和數據庫表的配置

<?xml version="1.0"?>                                                                                                    

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">                                                                              

<mycat:schema xmlns:mycat="http://io.mycat/">                                                                            

        <!-- name: 邏輯數據庫名 -->                                                                                      

        <schema name="mydb" checkSQLschema="false" sqlMaxLimit="100">                                                    

                <!-- name: 表名,分表主鍵,子表,數據節點,分表規則 -->                                                  

                <table name="submeter" primaryKey="id" autoIncrement="true" subTables="submeter$1-3" dataNode="dn1" rule="modlong"/>                                            

        </schema>                                                                                                        

        <!-- database:物理數據庫名 -->                                                                                   

        <dataNode name="dn1" dataHost="localhost1" database="mydb" />                                                    

        <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="192.168.85.128:3306" user="lsq" password="********">                        

                        <!-- can have multi read hosts -->                                                               

                        <readHost host="hostS1" url="192.168.85.130:3306" user="lsq" password="********" />               

                </writeHost>                                                                                             

        </dataHost>                                                                                                      

</mycat:schema>

schema name 要和 server.xml 對應上,既多個用戶擁有對該邏輯庫的權限。

<schema name="mydb">

city 設置分表三張,單庫多表只能設置一個 datanoterule 採用取模模式 mod-long 取模分片。

<table name="submeter" primaryKey="id" autoIncrement="true" subTables="submeter$1-3" dataNode="dn1" rule="modlong"/>

writeHostreadHost 可以設爲同一數據庫。上述配置爲主從庫。相關配置詳見:MySQL 配置主從

 

四:修改 rule.xml


MyCat 分片(分庫分表)規則.    mod-long 取模分片  取模列爲 id 取模算法爲 mod-long

<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 規則,只需修改 count 數,修改 property count 等於 3。這樣,配置已經完成。

 

五:修改 MySQL 數據庫


先在 MySQL 庫上,建 3 張表,submeter1-3。如下圖,從庫中也創建了三張一樣的表。



 

六:啓動 MyCat


啓動:

./mycat start

查看啓動狀態:

./mycat status

停止:

./mycat stop

重啓(改變上面的 xml 配置不用重啓,管理端可以重新載入):

./mycat restart

查看 logs/ 下的 wrapper.logmycat.log 可以查看運行時問題和異常。

MyCat 啓動日誌:

cat ./logs/wrapper.log

MyCat應用日誌:

cat ./logs/mycat.log

 

七:測試


mysql 創建 mydb 數據庫,submeter1, submeter2, submeter3 三張表。

連接 mycat, 端口:8066,賬號:lsq, 密碼:********                // 對應 server 表中的 user 標籤

執行 sql 語句,查看執行過程。

 

EXPLAIN

insert into submeter(id, l, s, q) VALUES (3, 'l3', 's3','q3')

可查看執行過程路由到物理表 submeter1 表上:


                


打開 mysql 中的 mydb 數據庫 submeter1 表可看到數據:


                


 

其他:錯誤


運行 MyCat 時提示以下錯誤:

代理拋出異常錯誤: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: server1: server1: nodename nor servname provided, or not known

解決辦法:

linux 環境下
vim /etc/hosts

win 環境下
C:\Windows\System32\drivers\etc    替換方案, 複製修改, 替換

將    127.0.0.1    localhost    改成    127.0.0.1    localhost    server1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章