安裝JDK
yum -y install java-1.8*
java
https://github.com/MyCATApache/Mycat-download 具體下載哪一個版本以發佈爲準,個人是1.4.node
下載的文件直接解壓便可。mysql
個人服務器是 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 查看啓動狀態
直接運行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與測試mysql徹底一致,mysql怎麼鏈接,mycat就怎麼鏈接。
推薦先採用命令行測試:
mysql -uroot -proot -P8066 -h127.0.0.1
若是採用工具鏈接,1.4,1.3目前部分工具沒法鏈接,會提示database not selected,建議採用高版本,navicat測試。1.5已經修復了部分工具鏈接。
=================================================================================
=========================配置============================
找到這一段 </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的配置文件中的庫名統一便可
<?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!!!!!!!!!!!!!!!!!!!!!!