MySQL的安裝(rpm格式/需要聯(lián)網(wǎng))
安裝環(huán)境
VMware Linux CentOS-6.5鹃祖。
上傳工具FileZilla Client
第一步:查看mysql是否安裝。
rpm -qa|grep mysql
第二步:如果mysql的版本不是想要的版本伤锚。需要把mysql卸載枯芬。
yum remove mysql mysql-server mysql-libs mysql-common
rm -rf /var/lib/mysql
rm /etc/my.cnf
第三步:安裝mysql掘殴。需要使用yum命令安裝匕荸。在安裝mysql之前需要安裝mysql的下載源递瑰。需要從oracle的官方網(wǎng)站下載跳座。
- 1 下載mysql的源包。
官網(wǎng)地址:https://dev.mysql.com/downloads/file/?id=450542
便捷下載:https://download.csdn.net/download/jjxbest/8395685
2)安裝mysql下載源:
yum localinstall mysql-community-release-el6-5.noarch.rpm
3)在線安裝mysql:
yum install mysql-community-server
第四步:?jiǎn)?dòng)mysql
service mysqld start
第五步:需要給root用戶設(shè)置密碼泣矛。
/usr/bin/mysqladmin -u root password 'new-password' // 為root賬號(hào)設(shè)置密碼
注意:'new-password' 需要替換成實(shí)際的密碼。
第六步:遠(yuǎn)程連接授權(quán)禾蚕。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
注意:'myuser'您朽、'mypassword' 需要替換成實(shí)際的用戶名和密碼。
MyCat
如今隨著互聯(lián)網(wǎng)的發(fā)展换淆,數(shù)據(jù)的量級(jí)也是撐指數(shù)的增長(zhǎng)哗总,從GB到TB到PB。對(duì)數(shù)據(jù)的各種操作也是愈加的困難倍试,傳統(tǒng)的關(guān)系性數(shù)據(jù)庫(kù)已經(jīng)無法滿足快速查詢與插入數(shù)據(jù)的需求讯屈。這個(gè)時(shí)候NoSQL的出現(xiàn)暫時(shí)解決了這一危機(jī)。它通過降低數(shù)據(jù)的安全性县习,減少對(duì)事務(wù)的支持涮母,減少對(duì)復(fù)雜查詢的支持,來獲取性能上的提升躁愿。但是叛本,在有些場(chǎng)合NoSQL一些折衷是無法滿足使用場(chǎng)景的,就比如有些使用場(chǎng)景是絕對(duì)要有事務(wù)與安全指標(biāo)的彤钟。這個(gè)時(shí)候NoSQL肯定是無法滿足的来候,所以還是需要使用關(guān)系性數(shù)據(jù)庫(kù)。如果使用關(guān)系型數(shù)據(jù)庫(kù)解決海量存儲(chǔ)的問題呢逸雹?此時(shí)就需要做數(shù)據(jù)庫(kù)集群营搅,為了提高查詢性能將一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)分散到不同的數(shù)據(jù)庫(kù)中存儲(chǔ)云挟。
1丶什么是數(shù)據(jù)庫(kù)分片
簡(jiǎn)單來說,就是指通過某種特定的條件转质,將我們存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上面园欣,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果。
數(shù)據(jù)的切分(Sharding)根據(jù)其切分規(guī)則的類型峭拘,可以分為兩種切分模式俊庇。
- (1)一種是按照不同的表(或者Schema)來切分到不同的數(shù)據(jù)庫(kù)(主機(jī))之上,這種切可以稱之為數(shù)據(jù)的垂直(縱向)切分
- (2)另外一種則是根據(jù)表中的數(shù)據(jù)的邏輯關(guān)系鸡挠,將同一個(gè)表中的數(shù)據(jù)按照某種條件拆分到多臺(tái)數(shù)據(jù)庫(kù)(主機(jī))上面辉饱,這種切分稱之為數(shù)據(jù)的水平(橫向)切分。
2丶使用MyCat實(shí)現(xiàn)數(shù)據(jù)庫(kù)分片
Mycat 背后是阿里曾經(jīng)開源的知名產(chǎn)品——Cobar拣展。Cobar 的核心功能和優(yōu)勢(shì)是 MySQL 數(shù)據(jù)庫(kù)分片彭沼,此產(chǎn)品曾經(jīng)廣為流傳,據(jù)說最早的發(fā)起者對(duì) Mysql 很精通备埃,后來從阿里跳槽了姓惑,阿里隨后開源的 Cobar,并維持到 2013 年年初按脚。Cobar 的思路和實(shí)現(xiàn)路徑的確不錯(cuò)于毙。基于 Java 開發(fā)的辅搬,實(shí)現(xiàn)了 MySQL 公開的二進(jìn)制傳輸協(xié)議唯沮,巧妙地將自己偽裝成一個(gè) MySQL Server,目前市面上絕大多數(shù) MySQL 客戶端工具和應(yīng)用都能兼容堪遂。比自己實(shí)現(xiàn)一個(gè)新的數(shù)據(jù)庫(kù)協(xié)議要明智的多介蛉,因?yàn)樯鷳B(tài)環(huán)境在哪里擺著。
Mycat 是基于 cobar 演變而來溶褪,對(duì) cobar 的代碼進(jìn)行了徹底的重構(gòu)币旧,使用 NIO 重構(gòu)了網(wǎng)絡(luò)模塊,并且優(yōu)化了 Buffer 內(nèi)核猿妈,增強(qiáng)了聚合吹菱,Join 等基本特性,同時(shí)兼容絕大多數(shù)數(shù)據(jù)庫(kù)成為通用的數(shù)據(jù)庫(kù)中間件于游。
簡(jiǎn)單的說毁葱,MyCAT就是:一個(gè)新穎的數(shù)據(jù)庫(kù)中間件產(chǎn)品支持mysql集群,或者mariadb cluster贰剥,提供高可用性數(shù)據(jù)分片集群倾剿。你可以像使用mysql一樣使用mycat。對(duì)于開發(fā)人員來說根本感覺不到mycat的存在。
3丶Mycat的分片策略
邏輯庫(kù)(schema)
通常對(duì)實(shí)際應(yīng)用來說前痘,業(yè)務(wù)開發(fā)人員并不需要知道中間件的存在凛捏,只需要知道數(shù)據(jù)庫(kù)的概念,所以數(shù)據(jù)庫(kù)中間件可以被看做是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)集群構(gòu)成的邏輯庫(kù)芹缔。
邏輯表(table)
既然有邏輯庫(kù)坯癣,那么就會(huì)有邏輯表,分布式數(shù)據(jù)庫(kù)中最欠,對(duì)應(yīng)用來說示罗,讀寫數(shù)據(jù)的表就是邏輯表。邏輯表芝硬,可以是數(shù)據(jù)切分后蚜点,分布在一個(gè)或多個(gè)分片庫(kù)中,也可以不做數(shù)據(jù)切分拌阴,不分片绍绘,只有一個(gè)表構(gòu)成。
分片表:是指那些原有的很大數(shù)據(jù)的表迟赃,需要切分到多個(gè)數(shù)據(jù)庫(kù)的表陪拘,這樣,每個(gè)分片都有一部分?jǐn)?shù)據(jù)纤壁,所有分片構(gòu)成了完整的數(shù)據(jù)左刽。 總而言之就是需要進(jìn)行分片的表。
非分片表:一個(gè)數(shù)據(jù)庫(kù)中并不是所有的表都很大酌媒,某些表是可以不用進(jìn)行切分的悠反,非分片是相對(duì)分片表來說的,就是那些不需要進(jìn)行數(shù)據(jù)切分的表馍佑。
分片節(jié)點(diǎn)(dataNode)
數(shù)據(jù)切分后,一個(gè)大表被分到不同的分片數(shù)據(jù)庫(kù)上面梨水,每個(gè)表分片所在的數(shù)據(jù)庫(kù)就是分片節(jié)點(diǎn)(dataNode)拭荤。
節(jié)點(diǎn)主機(jī)(dataHost)
數(shù)據(jù)切分后,每個(gè)分片節(jié)點(diǎn)(dataNode)不一定都會(huì)獨(dú)占一臺(tái)機(jī)器疫诽,同一機(jī)器上面可以有多個(gè)分片數(shù)據(jù)庫(kù)舅世,這樣一個(gè)或多個(gè)分片節(jié)點(diǎn)(dataNode)所在的機(jī)器就是節(jié)點(diǎn)主機(jī)(dataHost),為了規(guī)避單節(jié)點(diǎn)主機(jī)并發(fā)數(shù)限制,盡量將讀寫壓力高的分片節(jié)點(diǎn)(dataNode)均衡的放在不同的節(jié)點(diǎn)主機(jī)(dataHost)奇徒。
分片規(guī)則(rule)
數(shù)據(jù)切分雏亚,一個(gè)大表被分成若干個(gè)分片表,就需要一定的規(guī)則摩钙,這樣按照某種業(yè)務(wù)規(guī)則把數(shù)據(jù)分到某個(gè)分片的規(guī)則就是分片規(guī)則罢低,數(shù)據(jù)切分選擇合適的分片規(guī)則非常重要,將極大的避免后續(xù)數(shù)據(jù)處理的難度。
Mycat的下載及安裝
安裝環(huán)境
1网持、jdk:要求jdk必須是1.7及以上版本
2宜岛、Mysql:推薦mysql是5.5以上版本
3、Mycat: Mycat-server-xxxx-linux.tar.gz安裝包
Mycat的官方網(wǎng)站:http://www.mycat.org.cn/
下載地址:https://github.com/MyCATApache/Mycat-download
安裝
第一步:下載Mycat-server-xxxx-linux.tar.gz
第二步:將壓縮包解壓縮功舀。建議將mycat放到/usr/local/mycat目錄下萍倡。
第三步:進(jìn)入mycat目錄,
啟動(dòng)mycat
./mycat start
停止:
./mycat stop
mycat 支持的命令{ console | start | stop | restart | status | dump }
Mycat的默認(rèn)端口號(hào)為:8066
MyCat配置介紹
schema.xml
Schema.xml作為MyCat中重要的配置文件之一辟汰,管理著MyCat的邏輯庫(kù)列敲、表、分片規(guī)則帖汞、DataNode以及DataSource戴而。弄懂這些配置,是正確使用MyCat的前提涨冀。這里就一層層對(duì)該文件進(jìn)行解析填硕。
- schema 標(biāo)簽用于定義MyCat實(shí)例中的邏輯庫(kù)
- Table 標(biāo)簽定義了MyCat中的邏輯表
- dataNode 標(biāo)簽定義了MyCat中的數(shù)據(jù)節(jié)點(diǎn),也就是我們通常說所的數(shù)據(jù)分片鹿鳖。
- dataHost 標(biāo)簽在mycat邏輯庫(kù)中也是作為最底層的標(biāo)簽存在扁眯,直接定義了具體的數(shù)據(jù)庫(kù)實(shí)例、讀寫分離配置和心跳語(yǔ)句翅帜。
Server.xml
server.xml幾乎保存了所有mycat需要的系統(tǒng)配置信息姻檀。最常用的是在此配置用戶名、密碼及權(quán)限涝滴。
<user name="user">
<property name="password">user</property>
<property name="schemas">TestDB</property>
<property name="readOnly">false</property>
</user>
rule.xml
rule.xml里面就定義了我們對(duì)表進(jìn)行拆分所涉及到的規(guī)則定義绣版。我們可以靈活的對(duì)表使用不同的分片算法,或者對(duì)表使用相同的算法但具體的參數(shù)不同歼疮。這個(gè)文件里面主要有tableRule和function這兩個(gè)標(biāo)簽杂抽。在具體使用過程中可以按照需求添加tableRule
和function。
此配置文件可以不用修改韩脏,使用默認(rèn)即可缩麸。
MyCat讀寫分離
數(shù)據(jù)庫(kù)讀寫分離對(duì)于大型系統(tǒng)或者訪問量很高的互聯(lián)網(wǎng)應(yīng)用來說,是必不可少的一個(gè)重要功能赡矢。對(duì)于MySQL來說杭朱,標(biāo)準(zhǔn)的讀寫分離是主從模式,一個(gè)寫節(jié)點(diǎn)Master后面跟著多個(gè)讀節(jié)點(diǎn)吹散,讀節(jié)點(diǎn)的數(shù)量取決于系統(tǒng)的壓力弧械,通常是1-3個(gè)讀節(jié)點(diǎn)的配置。
Mycat讀寫分離和自動(dòng)切換機(jī)制空民,需要mysql的主從復(fù)制機(jī)制配合刃唐。
MySQL的主從復(fù)制
主從配置需要注意的地方
- 1、主DB server和從DB server數(shù)據(jù)庫(kù)的版本一致
- 2、主DB server和從DB server數(shù)據(jù)庫(kù)數(shù)據(jù)名稱一致
- 3唁桩、主DB server開啟二進(jìn)制日志,主DB server和從DB server的server_id都必須唯一
MySQL主服務(wù)器配置
第一步:修改my.conf文件:
在[mysqld]段下添加:
binlog-do-db=db1
binlog-ignore-db=mysql
#啟用二進(jìn)制日志
log-bin=mysql-bin
#主服務(wù)器唯一ID闭树,一般取IP最后一段
server-id=221
第二步:重啟mysql服務(wù)
service mysqld restart
第三步:建立帳戶并授權(quán)slave
mysql>GRANT FILE ON *.* TO 'user1'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'user1'@'%' identified by '123456';
一般不用root帳號(hào),“%”表示所有客戶端都可能連荒澡,只要帳號(hào)报辱,密碼正確,此處可用具體客戶端IP代替单山,如192.168.145.226碍现,加強(qiáng)安全。
刷新權(quán)限
mysql> FLUSH PRIVILEGES;
查看mysql現(xiàn)在有哪些用戶
mysql>select user,host from mysql.user;
第四步:查詢master的狀態(tài)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | db1 | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set
MySQL從服務(wù)器配置
第一步:修改my.conf文件
[mysqld]
#從服務(wù)器唯一ID米奸,一般取IP最后一段
server-id=222
第二步:配置從服務(wù)器
mysql>change master to master_host='192.168.25.221',master_port=3306,master_user='user1',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120
注意語(yǔ)句中間不要斷開昼接,master_port為mysql服務(wù)器端口號(hào)(無引號(hào)),master_user為執(zhí)行同步操作的數(shù)據(jù)庫(kù)賬戶悴晰,“120”無單引號(hào)(此處的120就是show master status 中看到的position的值慢睡,這里的mysql-bin.000001就是file對(duì)應(yīng)的值)。
第二步:?jiǎn)?dòng)從服務(wù)器復(fù)制功能
Mysql>start slave;
第三步:檢查從服務(wù)器復(fù)制功能狀態(tài):
mysql> show slave status
Slave_IO_Running: Yes //此狀態(tài)必須YES
Slave_SQL_Running: Yes //此狀態(tài)必須YES
注:Slave_IO及Slave_SQL進(jìn)程必須正常運(yùn)行铡溪,即YES狀態(tài)漂辐,否則都是錯(cuò)誤的狀態(tài)(如:其中一個(gè)NO均屬錯(cuò)誤)。
MyCat配置
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM" url="192.168.25.221:3306" user="root"
password="root">
<readHost host="hostS" url="192.168.25.222:3306" user="root"
password="root" />
</writeHost>
</dataHost>
配置說明
1丶讀寫分離配置:
設(shè)置 balance="1"與writeType="0"
Balance參數(shù)設(shè)置:
- balance=“0”, 所有讀操作都發(fā)送到當(dāng)前可用的writeHost上棕硫。
- balance=“1”髓涯,所有讀操作都隨機(jī)的發(fā)送到readHost。
- balance=“2”哈扮,所有讀操作都隨機(jī)的在writeHost纬纪、readhost上分發(fā)
WriteType參數(shù)設(shè)置:
- writeType=“0”, 所有寫操作都發(fā)送到可用的writeHost上。
- writeType=“1”滑肉,所有寫操作都隨機(jī)的發(fā)送到readHost包各。
- writeType=“2”,所有寫操作都隨機(jī)的在writeHost靶庙、readhost分上發(fā)髓棋。
“readHost是從屬于writeHost的,即意味著它從那個(gè)writeHost獲取同步數(shù)據(jù)惶洲,因此,當(dāng)它所屬的writeHost宕機(jī)了膳犹,則它也不會(huì)再參與到讀寫分離中來恬吕,即“不工作了”,這是因?yàn)榇藭r(shí)须床,它的數(shù)據(jù)已經(jīng)“不可靠”了铐料。基于這個(gè)考慮,目前mycat 1.3和1.4版本中钠惩,若想支持MySQL一主一從的標(biāo)準(zhǔn)配置柒凉,并且在主節(jié)點(diǎn)宕機(jī)的情況下,從節(jié)點(diǎn)還能讀取數(shù)據(jù)篓跛,則需要在Mycat里配置為兩個(gè)writeHost并設(shè)置banlance=1膝捞。”
2丶雙主切換策略配置:
設(shè)置 switchType="2" 與slaveThreshold="100"
switchType 目前有三種選擇:
- -1:表示不自動(dòng)切換
- 1 :默認(rèn)值愧沟,自動(dòng)切換
- 2 :基于MySQL主從同步的狀態(tài)決定是否切換
“Mycat心跳檢查語(yǔ)句配置為 show slave status 蔬咬,dataHost 上定義兩個(gè)新屬性: switchType="2" 與slaveThreshold="100",此時(shí)意味著開啟MySQL主從復(fù)制狀態(tài)綁定的讀寫分離與切換機(jī)制沐寺。Mycat心跳機(jī)制通過檢測(cè) show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三個(gè)字段來確定當(dāng)前主從同步的狀態(tài)以及Seconds_Behind_Master主從復(fù)制時(shí)延林艘。