MyCat安裝與測試教程 超詳細!


MyCat安裝與測試教程 超詳細!



MyCat基礎知識



一、什么是MYCAT?



1. 一個徹底開源的,面向企業應用開發的大數據庫集群
2. 支持事務、ACID、可以替代MySQL的加強版數據庫
3. 一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的Oracle集群
4. 一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
5. 結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品
6. 一個新穎的數據庫中間件產品



從定義和分類來看,它是一個開源的分布式數據庫系統,是一個實現了MySQL協議的Server,前端用戶可以把它看做是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生(Native)協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器通信,其核心功能是分庫分表,即將一個大表水平分割為N個小表,存儲在后端MySQL服務器里或者其他數據庫里。



Mycat發展到目前版本,已經不在是一個單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數據庫,也支持MongoDB這種新型NOSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在Mycat里,都是一個傳統的數據庫表,支持標准的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅度降低開發難度,提升開發速度,在測試階段,可以將一表定義為任何一種Mycat支持的存儲方式,比如MySQL的MyASM表、內存表、或者MongoDB、LeveIDB以及號稱是世界上最快的內存數據庫MemSQL上。

試想一下,用戶表存放在MemSQL上,大量讀頻率遠超過寫頻率的數據如訂單的快照數據存放於InnoDB中,一些日志數據存放於MongoDB中,而且還能把Oracle的表跟MySQL的表做關聯查詢,你是否有一種不能呼吸的感覺?而未來,還能通過Mycat自動將一些計算分析后的數據灌入到Hadoop中,並能用Mycat+Storm/Spark Stream引擎做大規模數據分析。



二、關鍵特性



支持SQL92標准

支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法

遵守Mysql原生協議,跨語言,跨平台,跨數據庫的通用中間件代理。

基於心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集群。

支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster

基於Nio實現,有效管理線程,解決高並發問題。

支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數,支持跨庫分頁。

支持單庫內部任意join,支持跨庫2表join,甚至基於caltlet的多表join。

支持通過全局表,ER關系的分片策略,實現了高效的多表join查詢。

支持多租戶方案。

支持分布式事務(弱xa)。

支持XA分布式事務(1.6.5)。

支持全局序列號,解決分布式下的主鍵生成問題。

分片規則豐富,插件化開發,易於擴展。

強大的web,命令行監控。

支持SQL黑名單、sql注入攻擊攔截

支持prepare預編譯指令(1.6)

支持非堆內存(Direct Memory)聚合計算(1.6)

支持PostgreSQL的native協議(1.6)

支持mysql和oracle存儲過程,out參數、多結果集返回(1.6)

支持zookeeper協調主從切換、zk序列、配置zk化(1.6)

支持庫內分表(1.6)

還有一些其他特性 這里就不全部舉例。



三、MyCat優勢


MyCat基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和性能以及眾多成熟的使用案例使得MYCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,我們能看到更遠。



業界優秀的開源項目和創新思路被廣泛融入到MYCAT的基因中,使得MYCAT在很多方面都領先於目前其他一些同類的開源項目,甚至超越某些商業產品。MYCAT背后有一支強大的技術團隊,其參與者都是5年以上資深軟件工程師、架構師、DBA等,優秀的技s術團隊保證了MYCAT的產品質量。



MYCAT並不依托於任何一個商業公司,因此不像某些開源項目,將一些重要的特性封閉在其商業產品中,使得開源項目成了一個擺設。






看到這里 想必你已經有對Mycat產生了濃厚的興趣 上面講了了一堆概念的東西 是不是已經手癢癢了? 但是在學習MyCat之前 你一定要精通mysql 如果你對自己沒信心 博主為大家准備了 MySql高級視頻教程



鏈接:https://pan.baidu.com/s/1pNkhKld 密碼:jo79




干貨准備!! MyCat安裝與測試!!



點擊查看源網頁



一、環境准備




本機環境是三台centos6.5




IP 主機名 數據庫名 安裝軟件

192.168.17.4 master db1 mycat,mysql

192.168.17.5 slave1 db2 mysql

192.168.17.6 slave2 db3 mysql




二、安裝mysql



1、安裝mysql軟件



linux下安裝mysql有兩種方式:一種是通過下載源碼編譯安裝,一種是通過rpm包安裝,如果配置了yum直接用yum安裝會更快



編譯安裝步驟:



./congfigrue –prefix=安裝路徑

make

make install



因為編譯安裝,后面為了使用方便要將服務注冊到init服務中比較麻煩,這里介紹最簡單的yum安裝



2、安裝mysql客戶端


yum -y install mysql






3、安裝mysql服務器端



yum -y install mysql-server
yum -y install mysql-devel







4、添加mysql用戶及權限並配置數據庫



三台服務器都安裝mysql以后 ,三台機器同樣配置數據庫

具體步驟如下:



4.1 配置編碼格式



vi /etc/my.cnf



添加



default-character-set=utf8









4.2 添加開機啟動項



chkconfig --add mysqld
chkconfig mysqld on









4.3 啟動mysql





service mysqld start







4.4 配置root用戶並設置密碼




mysqladmin -u root password 123456







4.5 創建新用戶



首先用root用戶登錄




mysql -uroot –p



然后輸入密碼







執行use mysql,進入用戶管理庫,執行



select user,host from user;



查詢當前用戶發現有一些user是空的用戶,直接刪掉,



delete from user where user=''



否則后面會出問題











這里能看到只能本機訪問root,可以通過執行語句




update user set host = '%' where user = 'root' andhost='localhost';



來釋放root的訪問權限,讓所有ip都能通過root登錄







執行語句




insert into mysql.user(Host,User,Password) values
("%","mycat",password("123456"));



添加新用戶







然后是賦權限,我這里是賦了所有權限,可以只賦某個庫,或者部分權限,命令自己網上查,執行賦權限語句




grant all privileges on *.* to 'mycat'@'%' identified by '123456';



后一定記得執行




flush privileges;



來刷新權限







登錄新建的用戶並創建響應的數據庫,




mysql –umycat–p




create database db1/db2/db3



根據不同機器數據庫名不同







4.6 上述操作在三台機器上一樣操作



三、安裝mycat



1、安裝mycat軟件並創建用戶



下載解壓



tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz



配置環境變量



export MYCAT_HOME=/opt/sxt/soft/mycat
PATH=$PATH:$MYCAT_HOME/bin







通過配置



sh /opt/sxt/soft/mycat/bin/mycat start



執行開機啟動也可以自己寫腳本加入init服務







創建一個新的group



groupadd mycat



創建一個新的用戶,並加入group



useradd -g mycat mycat



給新用戶設置密碼,



passwd mycat



2、配置mycat配置文件



在三台mysql的配置文件

vi /etc/my.cnf


中加入


lower_case_table_names = 1


來忽略大小寫






編輯schema文件

先備份一下cp





$MYCAT_HOME/conf/schema.xml
$MYCAT_HOME/conf/schema.xml.tmp
vim $MYCAT_HOME/conf/schema.xml



將里面mycat:schema節點的東西全部干掉,如下配置


<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"
rule="sharding-by-intfile" />
</schema>
<!--數據節點dn1,對應的主機c1,對應是數據庫db1 -->
<dataNode name="dn1" dataHost="master" database="db1" />
<dataNode name="dn2" dataHost="slave1" database="db2" />
<dataNode name="dn3" dataHost="slave2" database="db3" />
<!-- 主機C1-->
<dataHost name="master" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!--mysql數據庫的連接串 -->
<writeHost host="hostM1" url="master:3306" user="mycat"
password="123456">
</writeHost>
</dataHost>
<!-- 主機C2-->
<dataHost name="slave1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="slave1:3306" user="mycat"
password="123456">
</writeHost>
</dataHost>
<!-- 主機C3-->
<dataHost name="slave2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!--mysql數據庫的連接串 -->
<writeHost host="hostM3" url="slave2:3306" user="mycat"
password="123456">
</writeHost>
</dataHost>







在conf目錄下配置server.xml ,將目錄下沒有的用戶全部刪掉
或者注釋掉,添加可用的用戶,這里添加了



<user name="mycat">
<property name="password">123456</property>
<property name="schemas">JamesMycatSchema</property>
</user>







修改conf下的partition-hash-int.txt文件
在下面添加10020=2,原本默認的是分兩個就是10000和10010,
現在我們三個就要三個分類id了,添加一個即可







四、測試mycat



1、啟動mycat




執行



mycat start










tail -100 $MYCAT_HOME/logs/wrapper.log



查看結果如下就表明啟動成功了









2、測試mysql表橫向分割

在虛擬機外的windows安裝Navicatfor MySQL,分別連接到三個mysql數據庫,執行建表語句




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



用Navicatfor MySQL連接mycat,mycat默認端口是8066,配置如圖:









因為剛才執行了建表語句,這時候連接上了mycat里面也有一個空的employee表



執行如下語句



insert into employee(id,name,sharding_id) values(1, 'I am db1',10000);
insert into employee(id,name,sharding_id) values(2, 'I am db2',10010);
insert into employee(id,name,sharding_id) values(3, 'I am db3',10020);
insert into employee(id,name,sharding_id) values(4, 'I am db1',10000);
insert into employee(id,name,sharding_id) values(5, 'I am db2',10010);
insert into employee(id,name,sharding_id) values(6, 'I am db3',10020);








刷新一下navicat查看mycat連接的庫









db1








db2









db3









免責聲明!

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



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