SQL中間件MYCAT 安裝->配置

 

Mycat安裝與使用  如下安裝信息來自官網 http://www.mycat.org.cn/

 

 

安裝JDK

yum -y install java-1.8*
 java

下載:

https://github.com/MyCATApache/Mycat-download 具體下載哪一個版本以發佈爲準,個人是1.4.node

安裝:

下載的文件直接解壓便可。mysql

運行:

linux:

個人服務器是 rehat 6.5linux

//解壓git

tar -xvf Mycat-server-1.4-release-20151019230038-linux.tar.gzgithub

cd /usr/mycat/binsql

./mycat start 啓動數據庫

./mycat stop 中止vim

./mycat console 前臺運行服務器

./mycat install 添加到系統自動啓動(暫未實現)

./mycat remove 取消隨系統自動啓動(暫未實現)

./mycat restart 重啓服務

./mycat pause 暫停

./mycat status 查看啓動狀態

win:

直接運行startup_nowrap.bat,若是出現閃退,在cmd 命令行運行,查看出錯緣由。

內存配置:

 

配置文件,修改前先備份

配置文件,修改前先備份

配置文件,修改前先備份

啓動前,通常須要修改JVM配置參數,打開conf/wrapper.conf文件,以下行的內容爲2G和2048,可根據本機配置狀況修改成512M或其它值。 如下配置跟jvm參數徹底一致,能夠根據本身的jvm參數調整。

Java Additional Parameters

wrapper.java.additional.1=

wrapper.java.additional.1=-DMYCAT_HOME=.

wrapper.java.additional.2=-server

wrapper.java.additional.3=-XX:MaxPermSize=64M

wrapper.java.additional.4=-XX:+AggressiveOpts

wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m

wrapper.java.additional.6=-Dcom.sun.management.jmxremote

wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984

wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false

wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false

wrapper.java.additional.10=-Xmx100m

wrapper.java.additional.11=-Xms100m

wrapper.java.additional.12=-XX:+UseParNewGC

wrapper.java.additional.13=-XX:+UseConcMarkSweepGC

wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection

wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0

wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70

如下配置做廢:

wrapper.java.initmemory=3

wrapper.java.maxmemory=64

Mycat鏈接測試:

測試mycat與測試mysql徹底一致,mysql怎麼鏈接,mycat就怎麼鏈接。

推薦先採用命令行測試:

mysql -uroot -proot -P8066 -h127.0.0.1

若是採用工具鏈接,1.4,1.3目前部分工具沒法鏈接,會提示database not selected,建議採用高版本,navicat測試。1.5已經修復了部分工具鏈接。

=================================================================================

=========================配置============================

讀寫分享配置:

一,先配置server.xml

找到這一段

</system>
        <user name="test">
                <property name="password">test</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>

這裏配置了兩個能夠來鏈接的用戶
用戶1  test   密碼test   給予了此用戶TESTDB數據庫的權限
用戶2  user   密碼user   給予了此用戶TESTDB數據庫的只讀權限
注意這裏的testdb 不必定是你數據庫上的真實庫名.能夠任意指定.只要和接下來的schema.xml的配置文件中的庫名統一便可

二,接下來配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="travelrecord" dataNode="dn1" rule="auto-sharding-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" />
                <table name="goods" primaryKey="ID" type="global" dataNode="dn1" />
                <!-- random sharding using mod sharind rule -->
                <table name="hotnews" primaryKey="ID" dataNode="dn1"
                        rule="mod-long" />
                <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global" 
                        needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3" 
                        rule="mod-long" /> -->
                <table name="employee" primaryKey="ID" dataNode="dn1"
                        rule="sharding-by-intfile" />
                <table name="customer" primaryKey="ID" dataNode="dn1"
                        rule="sharding-by-intfile">
                        <childTable name="orders" primaryKey="ID" joinKey="customer_id"
                                parentKey="id">
                                <childTable name="order_items" joinKey="order_id"
                                        parentKey="id" />
                        </childTable>
                        <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
                                parentKey="id" />
                </table>
                <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate" 
                        /> -->
        </schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" 
                /> -->
        <dataNode name="dn1" dataHost="localhost1" database="testdb" />
        <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
         <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" /> 
        <dataNode       name="jdbc_dn2" dataHost="jdbchost" database="db2" /> 
        <dataNode name="jdbc_dn3"       dataHost="jdbchost" 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="172.16.12.167:3306" user="admin"
                        password="admin888">
                        <!-- can have multi read hosts -->

                </writeHost>
                <writeHost host="hostS1" url="172.16.12.169:3306" user="admin"
                        password="admin888" />
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>

</mycat:schema>

(三)配置文件解釋

一,  <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

這裏testdb就是咱們對外聲稱的咱們有數據庫的名稱  必須和server.xml中的用戶指定的數據庫名稱一致

添加一個dataNode="dn1" 是指定了咱們這個庫只在dn1上.沒有進行分庫

 

二, <dataNode name="dn1" dataHost="localhost1" database="db1" />

這裏只須要改database的名字 db1 就是你真實數據庫服務上的數據庫名 .

根據你本身的數據庫名進行修改.

 

三,<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

 

這裏只須要配置三個地方    balance="1"與writeType="0" ,switchType=」1」

a. balance 屬性負載均衡類型,目前的取值有 4 種:
1. balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的 writeHost 上。
2. balance="1",所有的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,簡單的說,當雙主雙從模式(M1 ->S1 , M2->S2,而且 M1 與 M2 互爲主備),正常狀況下, M2,S1,S2 都參與 select 語句的負載均衡。
3. balance="2",全部讀操做都隨機的在 writeHost、 readhost 上分發。
4. balance="3", 全部讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,注意 balance=3 只在 1.4 及其之後版本有, 1.3 沒有。

b. writeType 屬性
負載均衡類型,目前的取值有 3 種:
1. writeType="0", 全部寫操做發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個
writeHost,從新啓動後已切換後的爲準,切換記錄在配置文件中:dnindex.properties .
2. writeType="1",全部寫操做都隨機的發送到配置的 writeHost。
3. writeType="2",沒實現。

c. switchType 屬性
- -1 表示不自動切換
- 1 默認值,自動切換
- 2 基於MySQL 主從同步的狀態決定是否切換

四,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">

<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />

</writeHost>

這裏是配置的咱們的兩臺讀寫服務器IP地址訪問端口和 訪問用戶的用戶名和密碼

===============================================================================

命令檢測是否成功: mysql -utest -ptest -h172.16.12.54 -P8066

 

===============================================================================

 

排錯相關思路:

1,各個版本的配置文件可能會有所不一樣,請檢查版本的XML頭等相關的小細節

2,多個table裏面的dataNode要與下面的dataNode相參應

3,仔細檢查端口

4,檢查是否指定<dataNode name="dn1" dataHost="localhost1" database="testdb" />此處的database爲實際的MYSQL庫

5,網上博客的schema.xml可能只是貼出部分,請仔細和原DEMO進行比對

7,記得給你的防火牆開端口默認的mycat端口是8066,9066是管理端口

 

8,若是你在鏈接數據庫的時候日誌文件中一直報錯錯

錯誤:

Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

這個時候估計是你的數據庫的帳號和密碼錯誤了.因此IP被鎖

.首先須要去數據庫執行flush hosts;命令清除 被鎖死的IP

 

9,錯誤mycat.log中:  Unknown charsetIndex:224

  說明是字符集問題引發的數據庫不能鏈接成功

  #vim index_to_charset.properties

編輯配置文件中  設置224的字符集

好比個人數據庫中 224=utf8mb4

設置完成後再重啓服務就能夠了!

 

 10,host文件未修改報錯unknown error!!!!

STATUS | wrapper  | 2015/11/24 16:05:32 | Launching a JVM...
INFO   | jvm 5    | 2015/11/24 16:05:32 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=300M; support was removed in 8.0
ERROR  | wrapper  | 2015/11/24 16:05:37 | JVM exited while loading the application.
INFO   | jvm 5    | 2015/11/24 16:05:37 | Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: DB-01: DB-01: unknown error

修改/etc/hosts就行,network不用動要解析hostM1 和hostS1 這兩個到對應的ip!!!!!!!!!!!!!!!!!!!!!!

相關文章
相關標籤/搜索