您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Mycat如何部署與使用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
MyCAT 可以視為“MySQL”集群的企業級數據庫,用來替代昂貴的Oracle集群,其背后是阿里曾經開源的知名產品Cobar。MyCAT的目標是:低成本的將現有的單機數據庫和應用平滑遷移到“云”端,解決數據存儲和業務規模迅速增長情況下的數據瓶頸問題。
1 應用場景
Mycat 有很多數據分庫規則,接下來幾篇就相關覺得常用的規則進行試用與總結。
一般來說,按自然月份或按日期來進行數據分片的規則比較適用于商城訂單查詢,類似最近1周、2周、3個月內的數據。或是報表類應用。
這樣的數據放在一個片區內省去了數據合并的時間。
當然按月數據量不要過大就OK。
一、部署步驟詳解
(1) 用命令行工具或圖形化客戶端,連接MYSQL,創建DEMO所用三個分片數據庫;
CREATE SCHEMA `range_db_01` DEFAULT CHARACTER SET utf8 ; CREATE SCHEMA `range_db_02` DEFAULT CHARACTER SET utf8 ; CREATE SCHEMA `range_db_03` DEFAULT CHARACTER SET utf8 ; CREATE SCHEMA `range_db_04` DEFAULT CHARACTER SET utf8 ;
(2) 修改配置my.cnf新增以下語句, 一般會放在/etc/my.cnf 或 /etc/mysql/my.cnf,設置為Mysql表名大小寫不敏感,否則可能會發生表找不到的問題。
lower_case_table_names = 1
(3) 解壓Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 到安裝目錄下,會生成mycat目錄
(4) 安裝jdk-7u79-linux-x64
(5) 修改mycat/conf/wrap.conf 修改wrapper.Java.command=java為上一步存放路徑
wrapper.java.command=/usr/java/jdk1.7.0_79/
(6) 創建mycat 用戶,改變目錄權限為mycat
useradd mycat chown -R mycat.mycat mycat
(7) 修改用戶密碼
passwd mycat 輸入:
(8) 修改mycat/conf/schema.xml,URL、用戶名、密碼修改,其余不變
<writeHost host="hostM1" url="192.168.184.56:3306" user="root" password="root">
二、運行步驟詳解
(1) 進入 mycat/bin (默認數據端口為8066,管理端口為9066)
執行./mycat start
(2) 進入logs目錄,查看日志,如果wrapper.log 報錯 java.NET.BindException: Address already in use 殺掉正在執行的相關java進程
ps -ef|grep java kill -9 xxx
三、使用步驟詳解
(1) 進入mysql bin目錄mysql/bin/
(2) 登錄mysql 執行以下命令
./mysql -utest -ptest -h292.168.184.56 -P8066 -DTESTDB
(mycat的用戶賬號和授權信息是在conf/server.xml文件中配置)
(3) 表創建測試:
mysql> create table employee (id int not null primary key,name varchar(100),sharding_id int not null); Query OK, 0 rows affected (0.30 sec) mysql> explain create table employee (id int not null primary key,name varchar(100),sharding_id int not null); +-----------+------------------------------------------------------------------------------------------------+ | DATA_NODE | SQL | +-----------+------------------------------------------------------------------------------------------------+ | dn1 | create table employee (id int not null primary key,name varchar(100),sharding_id int not null) | | dn2 | create table employee (id int not null primary key,name varchar(100),sharding_id int not null) | +-----------+------------------------------------------------------------------------------------------------+ 2 rows in set (0.04 sec)
(4) 客戶端軟件使用:navicat
創建mycat新連接:ip:192.168.184.56,用戶名:test,密碼:test,端口:8066
可看到TESTDB數據庫下已創建表:employee
打開db1,db2 數據庫也可看到已創建表employee
(5) 插入數據測試
mysql> insert into employee(id,name,sharding_id) values(1,'leader us',10000); ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 6 Current database: TESTDB Query OK, 1 row affected (0.03 sec) mysql> explain insert into employee(id,name,sharding_id) values(1,'leader us',10000); +-----------+-----------------------------------------------------------------------+ | DATA_NODE | SQL | +-----------+-----------------------------------------------------------------------+ | dn1 | insert into employee(id,name,sharding_id) values(1,'leader us',10000) | +-----------+-----------------------------------------------------------------------+ 1 row in set (0.00 sec)
(6) 根據規則auto-sharding-long(主鍵范圍)進行分片測試
mysql> explain create table company(id int not null primary key,name varchar(100)); +-----------+---------------------------------------------------------------------+ | DATA_NODE | SQL | +-----------+---------------------------------------------------------------------+ | dn1 | create table company(id int not null primary key,name varchar(100)) | | dn2 | create table company(id int not null primary key,name varchar(100)) | | dn3 | create table company(id int not null primary key,name varchar(100)) | +-----------+---------------------------------------------------------------------+ 3 rows in set (0.01 sec)
(7) 三個分片上都插入了3條數據
mysql> explain insert into company(id,name) values(1,'hp'); +-----------+---------------------------------------------+ | 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') | +-----------+---------------------------------------------+ 3 rows in set (0.00 sec)
(8) 確認是分片存儲
mysql> select * from employee; +----+-----------+-------------+ | id | name | sharding_id | +----+-----------+-------------+ | 2 | me | 10010 | | 4 | mydog | 10010 | | 1 | leader us | 10000 | | 3 | mycat | 10000 | +----+-----------+-------------+ 4 rows in set (0.01 sec) mysql> explain select * from employee; +-----------+----------------------------------+ | DATA_NODE | SQL | +-----------+----------------------------------+ | dn1 | SELECT * FROM employee LIMIT 100 | | dn2 | SELECT * FROM employee LIMIT 100 | +-----------+----------------------------------+ 2 rows in set (0.00 sec)
關于“Mycat如何部署與使用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。