mysql主从复制 drbd_MySql主从复制简单案例实现
mysql的主從復制原理
在mysql主從復制架構(gòu)中,有一臺服務器作為MASTER服務器,該服務器負責所有的讀請求和寫請求。另外一臺或多臺作為slave服務器。當master上的某個應用程序發(fā)起寫請求時,該請求會被內(nèi)核響應并在內(nèi)核中執(zhí)行,然后在將其數(shù)據(jù)寫入到磁盤中去。并且將此次的操作以事件的形式記錄到二進制文件中去。此時master上的Binlog ?dump thread等待slave上的I/O thread連接請求。一旦slave I/O thread連接上了master的Binlog dump thread,則Binlog dump thread會將本地二進制文件中更新的事件復制給slave。當slave上的I/O thread接受從master復制過來的二進制文件中的事件時,會將其事件寫入到slave上的中繼日志文件中。然后slave會調(diào)用本地的SQL thread重新應用(或回放)中繼日志中的事件,然后在將其數(shù)據(jù)寫入到slave上的磁盤中。這就是mysql的主從復制功能。
由于slave上更新的數(shù)據(jù)不能復制給master,因此,對于slave而言,不能執(zhí)行寫操作。
mysql的三中復制模式:
1)異步模式(mysql默認復制模式)、半同步和同步復制模式。(這里用到的是異步復制模式)
mysql主從復制具有以下功能:
1、實現(xiàn)mysql數(shù)據(jù)庫的高可用性
2、可以輔助實現(xiàn)數(shù)據(jù)備份
3、可以異地容災
4、實現(xiàn)服務器分攤負載,即通過mysql的讀寫分離來實現(xiàn)分攤負載。(這里只是簡單的主從復制)
主從復制實現(xiàn)如下圖所示:
上圖原理說明:
1.Binlog dump thread:接受slave ?I/O thread的連接請求,并將master上的二進制文件中更新的事件復制給slave I/O thread。
2.slave I/O thread:接受Binlog dump thread復制過來的時間,并將其寫入到slave上的中繼日志文件中。
3.slave SQL thread:讀取中繼日志文件中的事件重新應用(或回放),并將其數(shù)據(jù)寫入到磁盤中去。
mysql的主從復制需要注意的事項:
一個master可以用于多個slave,而一個slave只能屬于某一個master,在主從架構(gòu)中,如果只有一個slave,那么在slave上重新回放中繼日志文件中的事件會引起數(shù)據(jù)庫的改變,因此,這個過程也會以事件的形式寫入到二進制日志文件中去。由于二進制日志是用來做及時點還原的,且master保存著一份完整的數(shù)據(jù),因此在slave上不需要開啟二進制日志功能,但是master上必須要開啟。如果有多個slave的情況下,在這多個slave中,有一個slave即當做master的slave又可以當做其他slave的master,那么此時這個slave上必須開啟二進制日志功能。即此時這個slave即充當slave又充當master。
下面開始配置:
1.實驗環(huán)境:
我用的是2臺Centos 6.5x86_64
IP地址分別為:
master.fpj.com ? 192.168.3.85
slave.fpj.com ? ?192.168.3.86
mysql的安裝我這里就不說了,可以用編譯安裝,也可以yum直接安裝,我這邊用yum直接安裝,版本是mysql-5.1.73(里面修改的datadir目錄這里就不寫出來了)。
2.配置主mysql服務
1)啟用二進制日志
2)定義serverID
3)創(chuàng)建具有復制權限的帳號
3.配置從mysql服務
1.關閉二進制日志,啟動中繼日志
2.定義server-id
3.使用有復制權限的帳號連接Master服務器
4.啟動I/O線程和sql線程
這里我直接start slave;直接啟動I/O,SQL線程,也可以一個個啟動;
下面就來查看下從服務器的狀態(tài):
4.我就來測試下master服務上新建一個fpjtest數(shù)據(jù)庫:
最后去從服務器上看看 fpjtest有沒有同步過來:
看上圖已經(jīng)同步過來了,說明mysql主從復制已經(jīng)實現(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的mysql主从复制 drbd_MySql主从复制简单案例实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jacoco入门_代码覆盖度工具jaco
- 下一篇: mysql check exist_my