mycat mysql 物理部署_一、MyCat的搭建
一、什么是mycat
簡單直接點就是,MyCat其實就是一個數(shù)據(jù)庫的中間件!一般我們都是app直接到數(shù)據(jù)庫!有了MyCat以后,就是app到MyCat然后再訪問數(shù)據(jù)庫。
mycat是個中間件,它負責連接管理mysql,應用程序連接mycat,把mycat當作mysql服務那樣連接操作。
linux系統(tǒng)的搭建
簡介:
MyCat是java開發(fā)的,所以安裝前要在你的系統(tǒng)的先安裝jdk1.7以上的版本才可以。
一、JDK安裝
安裝步驟:
1、wget安裝方式
起步搭建jdk1.7以上版本的java環(huán)境!然后下載mycat并且安裝,修改配置然后啟動mycat。
wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
ls查看下載壓縮包名并解壓 (1、pwd 可查看當前下載目錄和解壓目錄在root? ?2、yum install tar )
tar -zxvf jdk-8u131-linux-x64.tar.gz
2、yum 安裝方式
1、搜索JDK安裝包
yum search java|grep jdk
2、安裝
yum install java-1.8.0-openjdk-src.x86_64
3、測試安裝結(jié)果
java -version 通過yum默認安裝的路徑為??/usr/lib/jvm? 可以通過cd /usr/lib/jvm? 命令 查看
二、MyCat安裝
官網(wǎng):http://www.mycat.io/
2、wget獲取(使用pwd命令查看下載到當前的路徑)
wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
3、解壓
tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
4、環(huán)境變量配置
vi /etc/profile 添加
export MYCAT_HOME=/home/mycat
使環(huán)境變量生效source /etc/profile
5、啟動mycat
進入mycat/bin目錄,執(zhí)行./mycat start 用ps -ef|grep mycat查看下進程
暫時先不管,mysql的監(jiān)聽端口是3306,mycat的監(jiān)聽端口是8066,檢查下8066是不是在監(jiān)聽中
6、進程已啟動端口被監(jiān)聽,接下來查看mycat的默認賬號和密碼以及配置server.xml
cd /home/mycat
cat?conf/server.xml
配置了2個用戶,一個是root,一個是user,接下來使用navicat連接
7、配置 server.xml? ?vim conf/server.xml 無權(quán)限
授權(quán)chmod -R 777 mycat
8、MyCat配置文件介紹
conf/rule.xml 定義分片規(guī)則
conf/schema.xml 定義邏輯庫、表以及分片節(jié)點等內(nèi)容
conf/server.xml 定義用戶授權(quán)及服務器參數(shù)相關配置
8.1配置schema
<?xml version="1.0"?> #第一行必須是XML文件的第一個元素且前面不能空格。 否則報錯"[xX][mM][lL]" 的處理指令目標
#TESTDB 是MyCat默認的一個測試邏輯數(shù)據(jù)庫,需要在此節(jié)點下定義邏輯表,但在這里只是指定表的名稱,并不對表進行詳細的定義。
#下面這條語句就是指邏輯表tb_user_info將在dn1,dn2,dn3上創(chuàng)建 使用的分片規(guī)則是 auto-sharding-long
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
select user()
password="root123">
此時在schema.xml中配置好的表名,實際上只是一個邏輯的表,這個表在物理數(shù)據(jù)庫中并不存在,需要在MyCat通過Create Table 來創(chuàng)建這個表,執(zhí)行Create語句以后,MyCat會在真實MySql配置的數(shù)據(jù)庫中創(chuàng)建表。
8.2auto-sharding-long分片規(guī)則的實現(xiàn)原理
id
rang-long
autopartition-long.txt
可見這個TableRule是通過id 來進行分片的,分片的算法是rang-long,算法中使用了autopartition-long.txt
查看文本命令 cat autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2
K表示1000條記錄,M表示10000條記錄,上面的三個配置就是0~500萬的記錄會存在數(shù)據(jù)庫db1的表中,500萬~1000萬會存在db2的表中,1000萬~1500萬會存在db3的表中。
9、TESTDB 是MyCat默認的一個測試邏輯數(shù)據(jù)庫,需要在此節(jié)點下定義邏輯表,但在這里只是指定表的名稱,并不對表進行詳細的定義。
三、Mysql安裝
1、參考安裝即可
https://www.cnblogs.com/huiyi0521/p/10113280.html
2、解決支持遠程連接mysql
mysql> use mysql
mysql> select t.host from user t where t.user='root';
+--------------+
| host |
+--------------+
| localhost |
+--------------+
這個返回結(jié)果說明現(xiàn)在 root 用戶只允許在服務器的本地登錄。
執(zhí)行如下命令:
mysql>update user set host='%' where user='root';
然后重啟 MySQL 服務就可以了。
四、實踐
1、登錄物理數(shù)據(jù)庫,創(chuàng)建db1、db2、db3
create database db1;
create database db2;
create database db3;
2、客戶端連接mycat,注意連接的是mycat而不是物理數(shù)據(jù)庫,mycat默認端口號8066
mysql -uroot -p123456 -h127.0.0.1 -P8066 -DTESTDB
注意-P、-D需要大寫,-h 后面必須是ip,使用localhost會出錯
3、查看表,默認顯示schema.xml中配置的表,實際上此時物理數(shù)據(jù)庫沒有表,所以查詢employee會出錯
show databases;
4、修改mycat_home\conf\schema.xml中的url、user、password ,然后重新啟動
./mycat restart 重啟服務
5、表分片-mycat中,創(chuàng)建employee表,插入數(shù)據(jù)
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
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);
mycat中,執(zhí)行計劃顯示來自兩個數(shù)據(jù)節(jié)點,與schema.xml中配置的一致
explain select * from employee;
物理數(shù)據(jù)庫中,mycat創(chuàng)建了employee表,查看數(shù)據(jù),可以發(fā)現(xiàn)數(shù)據(jù)實現(xiàn)了分片
注意:
schema.xml 配置schema、datanode、datahost
schema就是邏輯數(shù)據(jù)庫,它包含table(邏輯表),表中有對應的datanode、分片規(guī)則
datanode,就是邏輯數(shù)據(jù)庫,含有物理數(shù)據(jù)庫名字
datahost,就是物理數(shù)據(jù)庫的ip地址,用戶名、密碼等
server.xml 配置連接mycat的用戶名、密碼、數(shù)據(jù)庫名
rule.xml 分片規(guī)則
將物理數(shù)據(jù)庫的某個數(shù)據(jù)庫作為一個節(jié)點,與mycat邏輯數(shù)據(jù)表關聯(lián),操作mycat某個邏輯表即操作在該多個節(jié)點的某個表對應,實現(xiàn)將邏輯表在多個節(jié)點進行數(shù)據(jù)切片(切片規(guī)則根據(jù)id)
MyCAT 定義了一種特殊的表邏輯表也稱全局表:
1、全局表的插入、更新操作會實時在所有節(jié)點上執(zhí)行,保持各個分片的數(shù)據(jù)一致性
2、全局表的查詢操作,只從一個節(jié)點獲取
3、全局表可以跟任何一個表進行 JOIN 操作
6、查詢數(shù)據(jù)
6.1讀的配置
讀寫配置一樣
select * from employee;
或者 select * from employee where id=3;
對我來說就是查詢操作就是查詢mycat的邏輯表跟普通表操作一樣
7、節(jié)點擴展-分片遷移
7.1?配置文件修改以及分片節(jié)點的位置(切片節(jié)點位置就是更改物理庫節(jié)點名不變)
7.2業(yè)務切換-表進行加鎖 注意:在業(yè)務量小的時候,比如凌晨,進行切換
先在db5、db6之上做flush table命令將dn2.employee內(nèi)存中數(shù)據(jù)刷到磁盤中,并重新加載mycat:
7.2.1 ?先在dh1上127.0.0.1刷磁盤
mysql> flush table dn2.employee with read lock; //或者兩個切片 flush table dn2.employee,dn3.employee with read lock;
Query OK, 0 rows affected (0.00 sec)
7.2 ?解鎖表
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
7.3 然后重新加載mycat,使改動的新配置的分片到新實例上生效
mysql> reload @@config;
Query OK, 1 row affected (0.08 sec)
Reload config success
7.4查看切片是否完整
mysql> explain select * from travelrecord;
7.2和7.3 都失敗了 我直接 ? ?./mycat restart 重啟服務 ? (缺少平滑啟動和鎖定)
那是因為7.2命令是在mysql里面執(zhí)行的,
7.3是在 mycat 9066管理端口里執(zhí)行? ?mysql -uroot -p123456 -h127.0.0.1 -P9066
插入測試
insert into employee(id,name,sharding_id) values(5, 'mycat',10000);
insert into employee(id,name,sharding_id) values(6, 'mydog',10010);
8切片規(guī)則- 三個節(jié)點 n1 、n2、n3 ,n1 滿了新增n4 替換n1來插入,然后n1節(jié)點保留且切片規(guī)則只允許只讀不允許插入即可解決。
總結(jié)
以上是生活随笔為你收集整理的mycat mysql 物理部署_一、MyCat的搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银联钱包设置支付密码(银联钱包怎么开通银
- 下一篇: 徐静蕾电脑字体(徐静蕾字体是什么字体)