這篇文章從三方面描述:主從復(fù)制的用途建钥?如何實現(xiàn)主從復(fù)制谎势?主從復(fù)制原理凛膏?
一、主從復(fù)制的用途
用途一:數(shù)據(jù)庫備份 脏榆。從數(shù)據(jù)庫會建立一個和主數(shù)據(jù)庫一樣的數(shù)據(jù)環(huán)境猖毫,當(dāng)主數(shù)據(jù)發(fā)生故障時或數(shù)據(jù)丟失時,從數(shù)據(jù)庫可以代替主數(shù)據(jù)繼續(xù)工作须喂,減少損失吁断。
用途二:讀寫分離。根據(jù)28定律坞生,大部分的互聯(lián)網(wǎng)應(yīng)用80%是讀操作胯府,20%是寫操作。通過讀寫分離恨胚,把原來所有操作都集中在主服務(wù)器上骂因,變?yōu)閷懖僮髟谥鞣?wù)器上,讀操作在從服務(wù)器上赃泡,緩解了主數(shù)據(jù)庫的壓力寒波,從而提高應(yīng)用的整體性能。
從系統(tǒng)架構(gòu)上來說升熊,基本上還是那兩個術(shù)語:高可用俄烁,高性能。
二级野、如何實現(xiàn)主從復(fù)制
這里我不過多的描述页屠,如何實現(xiàn)mysql的主從復(fù)制,網(wǎng)上一搜一大堆蓖柔,照著說明一步一步做就行了辰企。主要描述一下容易出問題的地方;
1.主服務(wù)器在創(chuàng)建有復(fù)制權(quán)限的用戶時况鸣,注意語句里面的參數(shù)牢贸。
完整的語句如下:grant replication slave ?on *.* ?to ? username@slave_ip identified by 'password'
username :創(chuàng)建的賬戶名,這個賬戶主要用來主從復(fù)制使用的镐捧,最好不要用root
@后面跟的是從服務(wù)器的ip地址潜索,這是為了安全起見臭增;也可以寫成%,表示任意ip的從服務(wù)器都可訪問竹习。
這里要注意一點誊抛,主從服務(wù)器之間的網(wǎng)絡(luò)一定要是通的,可以用ping命令測試整陌。
2.從服務(wù)器使用 change master to語句實現(xiàn)復(fù)制主庫芍锚。這個語句里面要注意master_log_file和master_log_pos這兩個參數(shù) ,這兩個參數(shù)的值是主庫的系統(tǒng)狀態(tài)值蔓榄,用show master_status語句查看并炮。
需要注意的是:重啟mysql服務(wù)能改變主服務(wù)器master_log_file的值,主庫的操作能改變master_log_pos的值甥郑,所以如遇到同步錯誤逃魄,可以檢查一下主服務(wù)器的狀態(tài)值,再同步從庫澜搅。
3.要會看懂從服務(wù)器的狀態(tài)伍俘。語句為 show slave status,兩個參數(shù)比較重要:
Slave_IO_Running,Slave_SQL_Running勉躺“看從服務(wù)器是否復(fù)制成功,需要這兩個參數(shù)的值都必須為YES饵溅,一個為NO都意味著復(fù)制失敗妨退。 密碼錯誤,網(wǎng)絡(luò)不通蜕企,主服務(wù)器binlog文件位置不對等等咬荷。
三、講一下主從復(fù)制的原理
主服務(wù)器把操作日志寫導(dǎo)二進(jìn)制文件中(binlog)轻掩,從服務(wù)器開啟兩個線程幸乒,一個是IO線程,用來向主服務(wù)器請求二進(jìn)制中發(fā)生的事件唇牧,寫到自身中繼日志中(relay_log)罕扎。然后從服務(wù)器再啟動一個SQL線程,執(zhí)行中繼日志中的事件丐重,就得到和主服務(wù)器中一樣的數(shù)據(jù)了腔召。上圖:
這兩個線程其實就是上面提到的Slave_IO_Running,Slave_SQL_Running弥臼。