實驗環(huán)境:
server5:MHA管理節(jié)點 172.25.66.5
server6:myslq master 172.25.66.6
server7:mysql Candicate slave 172.25.66.7
server8:mysql slave 172.2.66.8
1.安裝數(shù)據(jù)庫,搭建主從復(fù)制:(server6、7、8)
以server6為例:
vim /etc/my.cnf
重啟服務(wù)并初始化數(shù)據(jù)庫
/etc/init.d/mysqld start
grep password /var/log/mysqld.log
mysql -p
進(jìn)入數(shù)據(jù)庫首先需要重置root用戶密碼
查看master的狀態(tài),并授權(quán)slave能通過repl用戶,使用‘Yuanxiaoxi+007‘的密碼從master端進(jìn)行數(shù)據(jù)同步
兩個slave端的配置:
vim /etc/my.cnf
問題:SQL線程顯示為NO,錯誤提示中有“PRIMARY'
解決:在master端 reset master
在slave端:
測試兩個slave是否可以和master保持?jǐn)?shù)據(jù)同步
在master端插入數(shù)據(jù)
slave端數(shù)據(jù)同步
MHA端的配置:
檢查ssh連接
masterha_check_ssh
原因:MHA manager通過ssh訪問所有的node節(jié)點,各個node節(jié)點同樣也需要ssh來相互發(fā)送不同的relay log文件,所以有必要在每一個node和manager之間配置ssh無密碼登陸
ssh-keygen
ssh-copy-id 172.25.66.5
scp -r .ssh/ 172.25.66.6:
scp -r .ssh/ 172.25.66.7:
scp -r .ssh/ 172.25.66.8:
檢查repl環(huán)境
解決方法:在master上
在檢測時可能還會出現(xiàn)報錯:
slave節(jié)點配置:
在sever7和server8上配置slave為只讀,但不要寫入配置文件,因為master機(jī)down掉后可能隨時升級為master
set global read_only=1;
測試:
在server5開啟MHA監(jiān)控模式:
啟動參數(shù)介紹:
–remove_dead_master_conf 該參數(shù)代表當(dāng)發(fā)生主從切換后,老的主庫的ip將會從配置文件中移除。
–manger_log 日志存放位置
–ignore_last_failover 在缺省情況下,如果MHA檢測到連續(xù)發(fā)生宕機(jī),且兩次宕機(jī)間隔不足8小時的話,則不會進(jìn)行Failover,之所以這樣限制是為了避免ping-pong效應(yīng)。該參數(shù)代表忽略上次MHA觸發(fā)切換產(chǎn)生的文件, 默認(rèn)情況下,MHA發(fā)生切換后會在日志目錄下產(chǎn)生app1.failover.complete文件,下次再次切換的時候如果發(fā)現(xiàn)該目錄下存在該文件將不允許觸發(fā)切換,除非在第一次切換后手動刪除該文件,為了方便,這里設(shè)置為–ignore_last_failover。
將Master的服務(wù)down掉
在server5查看日志:
server7變?yōu)榱薽aster
server8的狀態(tài)
為了后續(xù)的實驗,將server6的服務(wù)恢復(fù)
/etc/init.d/mysqld start
在線切換:在許多情況下, 需要將現(xiàn)有的主服務(wù)器遷移到另外一臺服務(wù)器上。 比如主服務(wù)器硬件故障,RAID 控制卡需要重建,將主服務(wù)器移到性能更好的服務(wù)器上等等。
server7上變?yōu)榱藄lave
server6變?yōu)榱薽aster
手動切換:手動failover,這種場景意味著在業(yè)務(wù)上沒有啟用MHA自動切換功能,當(dāng)主服務(wù)器故障時,人工手動調(diào)用MHA來進(jìn)行故障切換操作
將server6的mysql服務(wù)down掉,在server5上手動切換到server7上
server7已經(jīng)變?yōu)榱薽aster
通過腳本的方式管理VIP:
vim master_ip_failover
vim master_ip_online_change
vim /etc/masterha/app1.cnf
第一次需要添加虛擬ip
在客戶端測試:可以訪問服務(wù)器
將server7的mysql服務(wù)down掉,看是否server6能否接替
客戶端使用虛擬ip訪問不受影響,并且虛擬ip自動調(diào)轉(zhuǎn)到了server6上
發(fā)送告警郵件
server5:
vim root/MHA/send_report
cp send_report /usr/local/bin/
cd /usr/local/bin/
chmod +x send_report
vim /etc/masterha/app1.cnf
測試:
mysql binlog日志優(yōu)化
在數(shù)據(jù)庫安裝完畢,對于binlog日志參數(shù)設(shè)置,有一些參數(shù)的調(diào)整,來滿足業(yè)務(wù)需求或使性能最大化。Mysql日志主要對io性能產(chǎn)生影響,本次主要關(guān)注binlog日志。binlog日志會記錄下數(shù)據(jù)庫的所以增刪改操作,當(dāng)不小心刪除、清空數(shù)據(jù),或數(shù)據(jù)庫系統(tǒng)出錯,這時候就可以使用binlog日志來還原數(shù)據(jù)庫,簡單來說就是一個記錄備份的東西
參數(shù)binlog_row_image 控制著這種image類型,默認(rèn)為FULL(log all columns),即記錄before&after images。
該參數(shù)還有兩種,minimal和noblob,minimal表示只記錄after更改后的值,并且如果有主鍵或者非空唯一索引,則只以該字段作為where條件判斷;noblob同full,只是不記錄blob、text列。
慢查詢?nèi)罩?slow_query_log,這個東西是用來記錄查詢比較慢的sql語句,通過查詢?nèi)罩緛聿檎夷臈lsql語句比較慢,然后就可以進(jìn)行數(shù)據(jù)庫或sql語句或程序上的優(yōu)化,簡單來說就是一個優(yōu)化輔助工具
1.開啟慢查詢?nèi)罩?/p>
如果想關(guān)閉慢查詢?nèi)罩?,只需要?zhí)行 set global slow_query_log = off
2.查詢慢查詢時間臨界點:查詢時間高于這個臨界點的都會被記錄到慢查詢?nèi)罩局?/p>
3.設(shè)置慢查詢時間臨界點:所有執(zhí)行時間超過1秒的sql都將被記錄到慢查詢文件中
set long_query_time = 1;
4.查看慢查詢?nèi)罩?/p>
比如上面,就表示 sql語句select sleep(10); 執(zhí)行時間為10.001548秒,超出了我們設(shè)置的慢查詢時間臨界點10s,所以被記錄下來了。
5.我們通過查看慢查詢?nèi)罩究梢园l(fā)現(xiàn),很亂,數(shù)據(jù)量大的時候,可能一天會產(chǎn)生幾個G的日志,根本沒有辦法去清晰明了的分析。所以,這里,我們采用工具進(jìn)行分析。