邢志峰
摘要:近年來,承鋼公司逐漸引入了開源軟件和開源數(shù)據(jù)庫來降低開發(fā)成本,MySQL做為最流行的開源數(shù)據(jù)庫在企業(yè)中應(yīng)用較多,數(shù)據(jù)庫的安全、備份與恢復(fù)一直是企業(yè)關(guān)注的重點(diǎn),在日常維護(hù)中數(shù)據(jù)庫的備份是定期執(zhí)行的,周期較長(zhǎng),本文通過對(duì)MySQL數(shù)據(jù)庫主從復(fù)制的研究,解決了數(shù)據(jù)不能實(shí)時(shí)備份的問題,而主從數(shù)據(jù)庫的切換能夠很好的保證前臺(tái)業(yè)務(wù)的穩(wěn)定運(yùn)行。
【關(guān)鍵詞】數(shù)據(jù)備份與恢復(fù) MySQL 主從復(fù)制
1 MySQL主從復(fù)制的原理
MySQL主從復(fù)制基于主數(shù)據(jù)庫的二進(jìn)制日志文件內(nèi)容進(jìn)行的,用戶對(duì)主數(shù)據(jù)庫的創(chuàng)建、修改、刪除等操作以及對(duì)表的增、刪、改、查操作都會(huì)記錄到二進(jìn)制日志文件中,從數(shù)據(jù)庫通過I/O線程來連接主服務(wù)器,主服務(wù)器創(chuàng)建一個(gè)線程將二進(jìn)制日志中的內(nèi)容發(fā)送到從服務(wù)器,從服務(wù)器將內(nèi)容拷貝到它的中繼日志當(dāng)中,從服務(wù)器利用SQL線程從中繼日志讀取事件,并重放其中的事件而更新到從數(shù)據(jù)庫當(dāng)中,使其與主數(shù)據(jù)庫中的數(shù)據(jù)保持一致。具體的原理圖如圖1。
2 MySQL主從復(fù)制的搭建
2.1 環(huán)境介紹
本文以MySQL的新版本5.7.18為例,將其安裝在Centos6的環(huán)境下,關(guān)閉本機(jī)的防火墻SeLinux和IPtables.使用Ntpdate與局域網(wǎng)的時(shí)問服務(wù)器進(jìn)行對(duì)時(shí)。另外,需要注意的是主從服務(wù)器版本必須一致,數(shù)據(jù)庫的root用戶密碼建議進(jìn)行修改,不要使用初始密碼。
2.2 安裝數(shù)據(jù)庫
通過官方網(wǎng)站找到操作系統(tǒng)對(duì)應(yīng)的安裝包,將其下載到本地進(jìn)行yum安裝,把MySQL的服務(wù)器端和客戶端軟件安裝完畢后啟動(dòng)數(shù)據(jù)庫服務(wù),修改數(shù)據(jù)庫的默認(rèn)密碼。
2.3 配置主數(shù)據(jù)庫參數(shù)
主從復(fù)制主要依靠數(shù)據(jù)庫的binlog日志,它以事件的形式保存,它是主從復(fù)制的基礎(chǔ),所以要在配置文件中開啟此項(xiàng)功能。下而介紹配置主從復(fù)制時(shí)的幾個(gè)重要參數(shù),server-id為主數(shù)據(jù)庫指定唯一的id值;max binlogcache size該參數(shù)表示binlog使用的內(nèi)存最大值,binlog_cache_size該參數(shù)表示binlog使用的內(nèi)存大小,可以通過查看狀態(tài)變量來查看當(dāng)前值用于測(cè)試;sync_binlog是個(gè)重要參數(shù)它直接影響mysql的性能和完整性,當(dāng)設(shè)置為O時(shí)表示,當(dāng)事務(wù)提交后binlog_cache中的數(shù)據(jù)寫入Binlog文件,同步文件系統(tǒng)不立即將數(shù)據(jù)刷新到磁盤上,而讓文件系統(tǒng)自行決定什么時(shí)候來做同步,這個(gè)是性能最好的,但是風(fēng)險(xiǎn)也是最大的,一旦同步系統(tǒng)崩漬,緩存中的數(shù)據(jù)將全部丟失。當(dāng)sync_binlog=n時(shí),在進(jìn)行n次事務(wù)提交以后,同步系統(tǒng)將強(qiáng)制進(jìn)行一次數(shù)據(jù)刷新,將緩存中的數(shù)據(jù)同步到磁盤上;innodb flush_ log_at_trx commit該參數(shù)表示每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入硬盤,這是很費(fèi)時(shí)的,但是最安全的。
2.4 配置從數(shù)據(jù)庫參數(shù)
在進(jìn)行主從復(fù)制時(shí),從數(shù)據(jù)庫依靠SlaveIO線程和Slave_SQL來實(shí)現(xiàn)數(shù)據(jù)的同步,從服務(wù)器的二進(jìn)制日志不是必須啟用的,如果該從服務(wù)器要作為其他服務(wù)器的主服務(wù)器時(shí)則需要啟用,若啟用二進(jìn)制日志,可以用作數(shù)據(jù)備份和功能恢復(fù)。下而介紹從數(shù)據(jù)庫的幾個(gè)重要參數(shù),server id是必須設(shè)置的,而且不能和主數(shù)據(jù)庫重復(fù):relay_log_recovery這個(gè)參數(shù)的作用是當(dāng)從數(shù)據(jù)庫宕機(jī)后,假如中繼日志損壞了,導(dǎo)致一部分中繼日志沒有處理,則自動(dòng)放棄所有未執(zhí)行的中繼日志,并且重新從主數(shù)據(jù)庫上獲取日志,這樣就保證了中繼日志的完整性,建議開啟;log_slave_updates表示從數(shù)據(jù)庫將復(fù)制事件寫進(jìn)自己的二進(jìn)制日志,使用該參數(shù)的前提是需要從數(shù)據(jù)庫開啟binlog日志。
2.5 主從數(shù)據(jù)庫的連接
設(shè)置完主從數(shù)據(jù)庫的參數(shù)之后,需要在主數(shù)據(jù)庫上為從數(shù)據(jù)庫創(chuàng)建復(fù)制用戶并進(jìn)行授權(quán),使用CHANGE MASTER TO語句指定主數(shù)據(jù)庫IP地址,指定復(fù)制用戶和密碼,二進(jìn)制日志文件名稱和數(shù)據(jù)庫同步位置。之后在從數(shù)據(jù)庫上啟動(dòng)slave線程,查看線程狀態(tài),如果Slave IO_Running和Slave_SQL_Running都為Yes,說明從數(shù)據(jù)庫狀態(tài)正常,在主數(shù)據(jù)庫上也可以看到從數(shù)據(jù)庫的I/O線程創(chuàng)建的連接,說明主從數(shù)據(jù)庫的連接正常。
3 主從數(shù)據(jù)庫的切換
在日常的數(shù)據(jù)庫維護(hù)中可能出現(xiàn)主數(shù)據(jù)庫的宕機(jī)導(dǎo)致業(yè)務(wù)不能正常使用,本文以承鋼設(shè)備平臺(tái)為例,講解主從數(shù)據(jù)庫的切換方法。承鋼設(shè)備平臺(tái)采用BS結(jié)構(gòu)開發(fā),后臺(tái)數(shù)據(jù)庫使用的是MySQL,通過數(shù)據(jù)庫的主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)庫的實(shí)時(shí)備份,通過使用監(jiān)控系統(tǒng)實(shí)時(shí)監(jiān)控主從數(shù)據(jù)庫狀態(tài),主數(shù)據(jù)庫一旦出現(xiàn)故障,通過監(jiān)控系統(tǒng)向數(shù)據(jù)庫管理員發(fā)送報(bào)警信息,數(shù)據(jù)庫管理員停止從數(shù)據(jù)庫的slave線程,即可實(shí)現(xiàn)主從數(shù)據(jù)庫的切換。
參考文獻(xiàn)
[1]施瓦茨等,高性能MYSQL [M].北京:電子工業(yè)出版社,2013.
[2]姜承堯.MYSQL技術(shù)內(nèi)幕INNODB存儲(chǔ)引擎[M].北京:機(jī)械工業(yè)出版社,2013.endprint