2017 11-12 MySQL應(yīng)用3

一.半同步復(fù)制

(1)半同步復(fù)制作用

相比較于同步復(fù)制和異步復(fù)制來說污抬,半同步復(fù)制的工作原理是當(dāng)主庫執(zhí)行完客戶端的提交的事務(wù)后并不是馬上返還給客戶端,而是要至少等待一個從庫將事務(wù)接收到并將內(nèi)容寫入relay_log中绳军。這樣做的好處是提高了數(shù)據(jù)的安全性印机,但是也會造成一些延遲,所以半同步復(fù)制也主要應(yīng)用在延遲較小的網(wǎng)絡(luò)環(huán)境中

(2)簡單配置實現(xiàn)半同步復(fù)制

首先準(zhǔn)備兩個虛擬機门驾,一個作為主庫射赛,一個作為從庫
開啟mysql數(shù)據(jù)庫
配置兩臺虛擬機為主從復(fù)制的關(guān)系
主庫上

搜狗截圖20171113211010.png

從庫上
搜狗截圖20171113211034.png

在主庫中設(shè)置 grant replication client ,replication slave on . to 'repluser'@'172.18.%.%' identified by 'replpass';
flush privileges;
搜狗截圖20171113211708.png

在主庫上安裝插件
install plugin rpl_semi_sync_master SONAME 'semisync_master';
搜狗截圖20171113212102.png

搜狗截圖20171113212218.png

在從節(jié)點上
開啟數(shù)據(jù)庫
執(zhí)行 change master to master_host='172.18.254.242',master_user='repluser',master_password='replpass',master_log_file='master-log.000003' master_log_pos=245;
start slave;
show slave status\G
搜狗截圖20171113212641.png

在從節(jié)點上安裝插件
install plugin rpl_semi_sync_slave SONAME 'semisync_slave';
搜狗截圖20171113212802.png

分別在主從節(jié)點上開啟半同步復(fù)制的功能
set @@global.rpl_semi_sync_master_enabled=ON;
搜狗截圖20171113213042.png

搜狗截圖20171113213059.png

set @@global.rpl_semi_sync_slave_enabled=ON;
搜狗截圖20171113213339.png

stop slave;
start slave;
show global status like '%rpl%';
搜狗截圖20171113213438.png

此時在主服務(wù)器上
搜狗截圖20171113213850.png

create database youdb;
use youdb;
create table hi values(id int,name char(30));
查看后表創(chuàng)建成功
搜狗截圖20171113214132.png

(2)使用復(fù)制過濾器

1.概念:僅復(fù)制有限一個或幾個數(shù)據(jù)庫相關(guān)的數(shù)據(jù),而非所有奶是;由復(fù)制過濾器進行楣责;
2.兩種實現(xiàn)思路
(1) 主服務(wù)器
主服務(wù)器僅向二進制日志中記錄有關(guān)特定數(shù)據(jù)庫相關(guān)的寫操作;
問題:其它庫的time-point recovery將無從實現(xiàn)聂沙;
binlog_do_db=
binlog_ignore_db=
(2) 從服務(wù)器
從服務(wù)器的SQL THREAD僅重放關(guān)注的數(shù)據(jù)庫或表相關(guān)的事件腐魂,并將其應(yīng)用于本地;
問題:網(wǎng)絡(luò)IO和磁盤IO;
Replicate_Do_DB=
Replicate_Ignore_DB=
Replicate_Do_Table=
Replicate_Ignore_Table=
Replicate_Wild_Do_Table=
Replicate_Wild_Ignore_Table=
權(quán)衡利弊與實際需要做好采用從服務(wù)器實現(xiàn)

(3)實現(xiàn)過程

在從服務(wù)器上
stop slave;
set @@global.replicate_ignore_db=youdb;——將youdb數(shù)據(jù)庫過濾不會對其內(nèi)容進行復(fù)制
start slave;
查看slave狀態(tài)


搜狗截圖20171113214847.png

此時在主服務(wù)上對youdb數(shù)據(jù)庫做一些修改
use database youdb;

insert into hi values(2,'wanghai');
搜狗截圖20171113215119.png

在從服務(wù)器上去查看
搜狗截圖20171113215211.png

注意小細(xì)節(jié):在主服務(wù)器上
搜狗截圖20171113215313.png

在從服務(wù)上
搜狗截圖20171113215326.png

這說明雖然從服務(wù)器也是從相同位置讀取數(shù)據(jù),但是并沒有對數(shù)據(jù)進行復(fù)制

(4)復(fù)制的監(jiān)控和維護

1.理日志:PURGE
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr };


搜狗截圖20171113215730.png

一般情況下最好不要刪除二進制文件蛔琅,如果非要刪除狭魂,也應(yīng)該先將二進制文件復(fù)制到別的地方,再進行刪除
例:如圖如果想刪除000003以前的日志但不包括000003日志就可以執(zhí)行 purge binary logs to 'master-log.000003';
2.復(fù)制監(jiān)控
MASTER:
SHOW MASTER STATUS;
SHOW BINLOG EVENTS;
SHOW BINARY LOGS;
SLAVE:
SHOW SLAVE STATUS;
判斷從服務(wù)器是否落后于主服務(wù)器:
Seconds_Behind_Master: 0
3.如何確定主從節(jié)點數(shù)據(jù)是否一致?
通過表的CHECKSUM檢查;
使用percona-tools中pt-table-checksum;
4.主從數(shù)據(jù)不一致時的修復(fù)方法育叁?
重新復(fù)制;

二.主從復(fù)制的讀寫分離

(1)常用的軟件是proxysql——下載地址www.proxysql.com,下載對應(yīng)版本芍殖。該軟件特點是高性能豪嗽,高可用
其他軟件:mysql-proxy ,oneproxy,maxscale
(2)接下來使用proxysql來實現(xiàn)讀寫分離的目的
步驟:在官網(wǎng)上下載好對應(yīng)版本后,通過yum install proxysql-1.4.2-1-centos67.x86_64.rpm
下載好之后可以先查看一下該軟件的相關(guān)信息

搜狗截圖20171114095759.png

進入配置文件進行配置
搜狗截圖20171114100230.png

搜狗截圖20171114101134.png

hostgroup=0代表主數(shù)據(jù)庫,hostgroup=1代表從數(shù)據(jù)庫
創(chuàng)建用戶配置段設(shè)置
搜狗截圖20171114101646.png

設(shè)置查詢規(guī)則
搜狗截圖20171114102048.png

調(diào)度讀寫分離
搜狗截圖20171114102328.png

實驗進行驗證讀寫分離是否生效
在proxysql服務(wù)器上以dbadmin身份登錄數(shù)據(jù)庫
搜狗截圖20171114102806.png

通過proxysql代理將數(shù)據(jù)庫代理到主數(shù)據(jù)庫上龟梦,此時寫操作都調(diào)度主數(shù)據(jù)庫上隐锭,而讀的內(nèi)容到調(diào)度到從數(shù)據(jù)庫上
注意細(xì)節(jié):不要忘了在從服務(wù)器上設(shè)置復(fù)制過濾器,否則讀寫分離的效果無法生效

三.MHA的應(yīng)用實現(xiàn)

(1)關(guān)于MHA的介紹
MHA(Master HA)是一款開源的Mysql的高可用程序计贰,它為Mysql的主從復(fù)制架構(gòu)提供了自動監(jiān)測機制钦睡,當(dāng)MHA監(jiān)測到master主節(jié)點出現(xiàn)故障后,它會提升和主節(jié)點復(fù)制信息內(nèi)容最接近的slave節(jié)點作為新的主節(jié)點躁倒,并且MHA還會通過獲取其他從節(jié)點的信息來避免一些一致性方面的問題荞怒。MHA還能提供master在線切換主從節(jié)點的功能。
MHA有兩種角色
1.MHA Manager(管理節(jié)點):通常單獨的存在于一臺服務(wù)器上管理多個master/slave集群秧秉,每個集群稱為一個application
2.MHA node(數(shù)據(jù)節(jié)點):該數(shù)據(jù)節(jié)點主要工作在每一個MYSQL服務(wù)器上褐桌,它通過監(jiān)控具有解析和清理logs日志功能的腳本來加快故障轉(zhuǎn)移
(2)準(zhǔn)備MHA環(huán)境
1.本次實驗要有四個節(jié)點
一個節(jié)點作為master節(jié)點
兩個節(jié)點作為slave節(jié)點
一個節(jié)點作為MHA節(jié)點
2.各節(jié)點之間要做解析

搜狗截圖20171114150920.png

3.主節(jié)點的配置文件進行設(shè)置
搜狗截圖20171114151119.png

4.從節(jié)點配置文件進行設(shè)置
搜狗截圖20171114151241.png

注意server_id不要相同
5.設(shè)置完成后主從節(jié)點開啟Mysql
在主節(jié)點上進行授權(quán)
show master status\G;
grant all on . to 'mhaadmin'@'172.18.%.%' identified by
'mhapass';
flush privileges;
在從節(jié)點上執(zhí)行
change master to master_host='172.18.254.242',master_user='repluser',master_password='replpass',master_log_file='master-log.000004',master_log_pos=245;
start slave;
show slave status\G
在另一個從節(jié)點上做相同操作
復(fù)制集群配置完成
6.準(zhǔn)備基于SSH互相通信的環(huán)境
在其中一個節(jié)點上
執(zhí)行ssh-keygen-id -t rsa -P ''
搜狗截圖20171114154816.png

cd.ssh
ssh-copy-id -i ./id_rsa.pub root@node3
分別將id_rsa 和id_rsa.pub復(fù)制到各個節(jié)點上
搜狗截圖20171114155135.png

ssh 驗證
搜狗截圖20171114155359.png

各個節(jié)點都交叉進行驗證
(7)安裝MHA
在node4上進行安裝
lftp 172.18.0.1/pub
cd Source
cd 6.x86_64
mget mhamysql-manager-0.56-0.e16.noarch.rpm
mhamysql-node-0.56-0.e16.noarch.rpm
在主從點上安裝mhamysql-node-0.56-0.e16.noarch.rpm即可
(8)對MHA進行的配置文件進行配置
mkdir /etc/masterha
vim /etc/masterha/app1.cnf
搜狗截圖20171114161350.png

配置完成后進行檢查檢驗ssh通信是否成功
master_check_ssh --conf=/etc/masterha/app1.cnf
主從復(fù)制集群是否成功
mhamysql-node-0.56-0.e16.noarch.rpm
注意:要在從節(jié)點上手動執(zhí)行flush privileges;
否則監(jiān)測結(jié)果為Health is not ok
檢查成功后啟動MHA
masterha_manger --conf=/etc/masterha/app1.cnf
(9)模擬主節(jié)點故障
關(guān)閉主節(jié)點數(shù)據(jù)庫,然后在MHA服務(wù)器上重新執(zhí)行
mhamysql-node-0.56-0.e16.noarch.rpm
監(jiān)測結(jié)果為Health is not ok
此時在從節(jié)點上(172.18.25.62)變?yōu)橹鞴?jié)點
show slave status\G象迎;
內(nèi)容為空撩嚼,證明此時該節(jié)點為主節(jié)點
show master status\G;
變?yōu)樾碌闹鞴?jié)點
如果想要原來的主節(jié)點上線,就要在原來的主節(jié)點的配置文件文件中加入relay_log_purge=OFF relay_only=ON
重新啟動該數(shù)據(jù)庫挖帘,并導(dǎo)入
change master to master_host='172.18.25.62',master_user='repluser',master_password='replpass',master_log_file='master-log.000003',master_log_pos=395;
start slave;
show slave status\G;
上線成功
注意:啟動MHA也可以執(zhí)行后臺運行機制
nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/data/master/app1/manager.log &

四.表分區(qū)的建立

(1)根據(jù)范圍進行劃分
打開數(shù)據(jù)庫
選擇hellodb數(shù)據(jù)庫
創(chuàng)建一個表
CREATE TABLE students (id INT, name VARCHAR(100), age TINYINT UNSIGNED NOT NULL, gender ENUM('F','M')) PARTITION BY range(age)(partition youngman values less than (40), partition middleman values less than (70), partition oldman values less than maxvalue);


搜狗截圖20171114201947.png

for語句生成表內(nèi)容
gender=('F' 'M')
echo ${gender[0]}
echo ${gender[1]}
for i in {1..1000};do mysql -e "insert into hellodb.students2 values ($i,'stu$i',$[RANDOM%100+18],'${gender[$RANDOM%2]}');" -uroot -pmagedu;done


搜狗截圖20171114202754.png

(2)按hash劃分表
創(chuàng)建一個新的表
CREATE TABLE students (id INT, name CHAR(100) NOT NULL, age TINYINT UNSIGNED, gender ENUM('F','M')) PARTITION BY hash(id) PARTITIONS 6;
搜狗截圖20171114203016.png

同樣用for語句創(chuàng)建表的內(nèi)容
for i in {1..1000};do mysql -e "insert into hellodb.students values ($i,'stu$i',$[RANDOM%100+18],'${gender[$RANDOM%2]}');" -uroot -pmagedu;done

(3)按照List來劃分表
CREATE TABLE students (id INT, name CHAR(100) NOT NULL, age TINYINT UNSIGNED, gender ENUM('F','M'),majorid tinyint unsigned not null) partition by list(majorid) (partition apr0 values in (1,4,7),partition par1 values in (2,5,8),partition par2 values in (3,6,9));


搜狗截圖20171114203658.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恋技,一起剝皮案震驚了整個濱河市拇舀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜻底,老刑警劉巖骄崩,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異薄辅,居然都是意外死亡要拂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門站楚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脱惰,“玉大人,你說我怎么就攤上這事窿春±唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵旧乞,是天一觀的道長蔚润。 經(jīng)常有香客問我,道長尺栖,這世上最難降的妖魔是什么嫡纠? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上除盏,老公的妹妹穿的比我還像新娘叉橱。我一直安慰自己,他們只是感情好痴颊,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布赏迟。 她就那樣靜靜地躺著,像睡著了一般蠢棱。 火紅的嫁衣襯著肌膚如雪锌杀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天泻仙,我揣著相機與錄音糕再,去河邊找鬼。 笑死玉转,一個胖子當(dāng)著我的面吹牛突想,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播究抓,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猾担,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刺下?” 一聲冷哼從身側(cè)響起绑嘹,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎橘茉,沒想到半個月后工腋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡畅卓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年擅腰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翁潘。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡趁冈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拜马,到底是詐尸還是另有隱情箱歧,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布一膨,位于F島的核電站呀邢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏豹绪。R本人自食惡果不足惜价淌,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一申眼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝉衣,春花似錦括尸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啦膜,卻和暖如春有送,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僧家。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工雀摘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人八拱。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓阵赠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肌稻。 傳聞我的和親對象是個殘疾皇子清蚀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容