MyCat安裝與測試教程 超詳細!MyCat基礎知識1、什麼是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、DB二、PostgreSQL等主流數據庫,也支持MongoDB這種新型NOSQL方式的存儲,將來還會支持更多類型的存儲。而在最終用戶看來,不管是那種存儲方式,在Mycat裏,都是一個傳統的數據庫表,支持標準的SQL語句進行數據的操做,這樣一來,對前端業務系統來講,能夠大幅度下降開發難度,提高開發速度,在測試階段,能夠將一表定義爲任何一種Mycat支持的存儲方式,好比MySQL的MyASM表、內存表、或者MongoDB、LeveIDB以及號稱是世界上最快的內存數據庫MemSQL上。 試想一下,用戶表存放在MemSQL上,大量讀頻率遠超過寫頻率的數據如訂單的快照數據存放於InnoDB中,一些日誌數據存放於MongoDB中,並且還能把Oracle的表跟MySQL的表作關聯查詢,你是否有一種不能呼吸的感受?而將來,還能經過Mycat自動將一些計算分析後的數據灌入到Hadoop中,並能用Mycat+Storm/Spark Stream引擎作大規模數據分析。2、關鍵特性支持SQL92標準支持MySQL、Oracle、DB二、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)還有一些其餘特性 這裏就不所有舉例。3、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安裝與測試!!點擊查看源網頁1、環境準備本機環境是三臺centos6.5IP 主機名 數據庫名 安裝軟件192.168.17.4 master db1 mycat,mysql192.168.17.5 slave1 db2 mysql192.168.17.6 slave2 db3 mysql2、安裝mysql一、安裝mysql軟件linux下安裝mysql有兩種方式:一種是經過下載源碼編譯安裝,一種是經過rpm包安裝,若是配置了yum直接用yum安裝會更快編譯安裝步驟: ./congfigrue –prefix=安裝路徑 makemake install由於編譯安裝,後面爲了使用方便要將服務註冊到init服務中比較麻煩,這裏介紹最簡單的yum安裝二、安裝mysql客戶端yum -y install mysql三、安裝mysql服務器端yum -y install mysql-server yum -y install mysql-devel四、添加mysql用戶及權限並配置數據庫 三臺服務器都安裝mysql之後 ,三臺機器一樣配置數據庫具體步驟以下:4.1 配置編碼格式vi /etc/my.cnf添加default-character-set=utf84.2 添加開機啓動項chkconfig --add mysqldchkconfig mysqld on4.3 啓動mysqlservice mysqld start4.4 配置root用戶並設置密碼mysqladmin -u root password 1234564.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–pcreate database db1/db2/db3根據不一樣機器數據庫名不一樣4.6 上述操做在三臺機器上同樣操做3、安裝mycat一、安裝mycat軟件並建立用戶下載解壓tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz配置環境變量export MYCAT_HOME=/opt/sxt/soft/mycatPATH=$PATH:$MYCAT_HOME/bin經過配置sh /opt/sxt/soft/mycat/bin/mycat start執行開機啓動也能夠本身寫腳本加入init服務建立一個新的groupgroupadd mycat 建立一個新的用戶,並加入groupuseradd -g mycat mycat給新用戶設置密碼,passwd mycat二、配置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了,添加一個便可4、測試mycat一、啓動mycat執行mycat starttail -100 $MYCAT_HOME/logs/wrapper.log查看結果以下就代表啓動成功了二、測試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鏈接的庫db1db2db3