MyCAT安裝指南


MyCAT安裝指南

 

 MyCAT 1.2版本

 

 

快速上手-安裝指南(安裝單機)

Mycat的server和mysql位於同一台服務器,centos6.2.4環境

Mycat:10.191.116.175

Mysql:10.191.116.175

 

是用Java開發,需要有JAVA運行環境,mycat依賴jdk1.7的環境,若本機沒有,則需要下載安裝:

http://www.java.com/zh_CN/

獲取MyCAT最新開源版本,項目主頁http://code.google.com/p/MyCAT/

目前最新代碼暫時在淘寶上托管,二進制包下載地址:

http://code.taobao.org/svn/openclouddb/downloads/

windows下可以下載Mycat-server-xxxx.ZIP,linux下可以下載tar.gz解開在某個目錄下,注意,目錄不能有空格,在Linux(Unix)下,建議放在/usr/local/MyCAT目錄下,如下面類似的:

 

下面是修改MyCat用戶的密碼方式(僅供參考)

 

 

目錄解釋如下:

Bin 程序目錄,存放了window版本和linux版本,除了提供封裝成服務的版本之外,也提供了nowrap的shell腳本命令,方便大家選擇和修改,進入到bin目錄:

  • Windows 下 運行: mycat.bat  console 在控制台啟動程序,也可以裝載成服務,若此程序運行有問題,也可以運行startup_nowrap.bat,確保java命令可以在命令執行。
  • Linux下運行:nohup sh  mycat  console &,首先要chmod +x mycat

Warp方式的命令,可以安裝成服務並啟動或停止。

  • mycat install (可選)
  • mycat start

注意,wrap方式的程序,其JVM配置參數在conf/wrap.conf中,可以修改為合適的參數,參數調整參照http://wrapper.tanukisoftware.com/doc/english/properties.html用下面是一段實例:

注:mycat必須依賴jdk1.7,在1.6的情景下會報錯,如果機器未升級可以指定jdk的目錄,我考了一個jdk的包出來的,添加的絕對路徑,根據情況定。

wrapper.java.command=/usr/local/Mycat/jdk1.7.0/bin/java

# Java Additional Parameters

wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G

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

# Initial Java Heap Size (in MB)

wrapper.java.initmemory=2048

# Maximum Java Heap Size (in MB)

wrapper.java.maxmemory=2048

若啟動報內存不夠,可以試着將上述內存都改小,改為1G或500M

Conf目錄下存放配置文件,server.xml是Mycat服務器參數調整和用戶授權的配置文件,schema.xml是邏輯庫定義和表以及分片定義的配置文件,rule.xml是分片規則的配置文件,分片規則的具體一些參數信息單獨存放為文件,也在這個目錄下,配置文件修改,需要重啟Mycat或者通過9066端口reload。

日志存放在logs/mycat.log中,每天一個文件,日志的配置是在conf/log4j.xml中,根據自己的需要,可以調整輸出級別為debug,debug級別下,會輸出更多的信息,方便排查問題。

建議本地有一個Mysql Server,若沒有,建議安裝一個,下載地址:

http://dev.mysql.com/downloads/mysql/5.5.html#downloads

啟動Mysql,確保能正常登錄訪問數據,msyql命令行工具mysql\bin\mysql.exe建議加入PATH路徑中,為了方便使用。

Service mysql start

用命令行工具或圖形化客戶端,連接MYSQL,創建DEMO所用三個分片數據庫;

CREATE database db1;

CREATE database db2;

CREATE database db3;

注意:若是LINUX版本的MYSQL,則需要設置為Mysql大小寫不敏感,否則可能會發生表找不到的問題。

MySQL的配置文件中my.ini [mysqld] 中增加一行

  lower_case_table_names = 1

編輯MYCAT_HOME/conf/schema.xml文件,修改dataHost對應的連接信息:

 

注意writeHost/readHost中的location,user,password的值符合你所采用的Mysql的連接信息。

 

修改完成后保存,進入到MYCAT_HOME/bin目錄下,執行啟動命令:startup.bat ,啟動成功以后顯示如下信息:

 

注意,默認數據端口為8066,管理端口為9066。

客戶端也可以用圖形化的客戶端如:mysqlworkbench、 navicat 、以及一些基於Java的數據庫客戶端來訪問,注意要填寫端口號8066,以及database 為TESTDB。

 

命令行運行:mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB  就能訪問OpenCloudDB了,以下操作都在此命令行里執行(JDBC則將mysql的URL中的端口3306改為8066即可)

提示:訪問MyCAT的用戶賬號和授權信息是在conf/server.xml文件中配置,而MyCAT用來連接后端MySQL庫的用戶名密碼信息則在conf/schema.xml中,這是兩套完全獨立的系統,類似的還有MyCAT的邏輯庫(schema),邏輯表(table)也是類似的。

Employee表,是根據規則sharding-by-intfile (分片字段為sharding_id)進行分片。創建employee表:輸入如下SQL

create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

運行explain指令,查看該SQL被發往哪些分片節點執行:

explaincreate table employee (id int not null primary key,name varchar(100),sharding_id int not null);

 

建議參照schema.xml中employee表的定義,以及其分片規則,來看看什么數據會出現在dn1上,什么數據會出現在dn2上。

溫馨提示:explain可以用於任何正確的SQL上,其作用是告訴你,這條SQL會路由到哪些分片節點上執行,這對於診斷分片相關的問題很有幫助。另外,explain可以安全的執行多次,它僅僅是告訴你SQL的路由分片,而不會執行該SQL

插入數據:

insert into employee(id,name,sharding_id) values(1,'leader us',10000);

insert into employee(id,name,sharding_id) values(2, 'me',10010);

insert into employee(id,name,sharding_id) values(3, 'mycat',10000);

insert into employee(id,name,sharding_id) values(4, 'mydog',10010);

 

company表是根據規則auto-sharding-long(主鍵范圍)進行分片。創建company表:輸入如下SQL

 create table company(id int not null primary key,name varchar(100));

錄入數據:

     insert into company(id,name) values(1,'hp');

     insert into company(id,name) values(2,'ibm');

     insert into company(id,name) values(3,'oracle');

你會看到三個分片上都插入了3條數據,因為company定義為全局表,用explain來確認這個情況:

explain insert into company(id,name) values(1,'hp')

返回3個節點的信息:

                     | DATA_NODE | SQL                                         |

                     +-----------+---------------------------------------------+

                     | dn1       | insert into company(id,name) values(1,'hp') |

                     | dn2       | insert into company(id,name) values(1,'hp') |

                     | dn3       | insert into company(id,name) values(1,'hp') |

                     +-----------+---------------------------------------------+

創建客戶表:

create customer:    create table customer(id int not null primary key,name varchar(100),company_id int not null,sharding_id int not null);

插入數據:

       insert into customer (id,name,company_id,sharding_id )values(1,'wang',1,10000);  //stored in db1;

         insert into customer (id,name,company_id,sharding_id )values(2,'xue',2,10010);  //stored in db2;

         insert into customer (id,name,company_id,sharding_id )values(3,'feng',3,10000); //stored in db1;

查詢結果:

Select * from  customer;

explain Select * from  customer;  (確認數據是分片存儲)

創建表格orders,並插入數據:

create table orders (id int not null primary key ,customer_id int not null,sataus int ,note varchar(100) );

        insert into orders(id,customer_id) values(1,1); //stored in db1 because customer table with id=1 stored in db1  

        insert into orders(id,customer_id) values(2,2); //stored in db2 because customer table with id=1 stored in db2   

        explain insert into orders(id,customer_id) values(2,2);

        select customer.name ,orders.* from customer ,orders where customer.id=orders.customer_id;

 

travelrecord根據ID主鍵的范圍進行分片:

create travelrecord: create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);

        insert into travelrecord (id,user_id,traveldate,fee,days) values(1,'wang','2014-01-05',510.5,3);這個ID就存放在分片0上了

 

 

explain insert into travelrecord (id,user_id,traveldate,fee,days) values(7000001,'wang','2014-01-05',510.5,3); 這個ID就存放在分片1上了

 

 

看到支持跨分片的JOIN!

 

熱點新聞,用取摸的方式隨機分配到dn1,dn2,dn3上

create table hotnews(id int  not null primary key ,title varchar(400) ,created_time datetime);

插入數據

insert into hotnews(id,title,created_time) values(1,'first',now()); 在分片1上

 

而Id為5,則到dn3上,5%3=2 ,即對應dn3的 index

 

其他:

goods表

create table goods(id int not null primary key,name varchar(200),good_type tinyint,good_img_url  varchar(200),good_created date,good_desc varchar(500), price double);一起探索MyCAT的奇妙新世界吧! QQ群:106088787


免責聲明!

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



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