MySQL主從原理及配置詳解
MySQL主從配置及原理,供大家參考,具體內(nèi)容如下
一、環(huán)境選擇:
1.Centos 6.5
2.MySQL 5.7
二、什么是MySQL主從復(fù)制
MySQL主從復(fù)制是其最重要的功能之一。主從復(fù)制是指一臺服務(wù)器充當主數(shù)據(jù)庫服務(wù)器,另一臺或多臺服務(wù)器充當從數(shù)據(jù)庫服務(wù)器,主服務(wù)器中的數(shù)據(jù)自動復(fù)制到從服務(wù)器之中。對于多級復(fù)制,數(shù)據(jù)庫服務(wù)器即可充當主機,也可充當從機。MySQL主從復(fù)制的基礎(chǔ)是主服務(wù)器對數(shù)據(jù)庫修改記錄二進制日志,從服務(wù)器通過主服務(wù)器的二進制日志自動執(zhí)行更新。
三、MySQL主從復(fù)制的類型
1.基于語句的復(fù)制
主服務(wù)器上面執(zhí)行的語句在從服務(wù)器上面再執(zhí)行一遍,在MySQL-3.23版本以后支持。
缺點:時間上可能不完全同步造成偏差,執(zhí)行語句的用戶也可能是不同一個用戶。
2.基于行的復(fù)制
把主服務(wù)器上面改編后的內(nèi)容直接復(fù)制過去,而不關(guān)心到底改變該內(nèi)容是由哪條語句引發(fā)的,在MySQL-5.0版本以后引入。
缺點:比如一個工資表中有一萬個用戶,我們把每個用戶的工資+1000,那么基于行的復(fù)制則要復(fù)制一萬行的內(nèi)容,由此造成的開銷比較大,而基于語句的復(fù)制僅僅一條語句就可以了。
3.混合類型的復(fù)制
MySQL默認使用基于語句的復(fù)制,當基于語句的復(fù)制會引發(fā)問題的時候就會使用基于行的復(fù)制,MySQL會自動進行選擇。
在MySQL主從復(fù)制架構(gòu)中,讀操作可以在所有的服務(wù)器上面進行,而寫操作只能在主服務(wù)器上面進行。主從復(fù)制架構(gòu)雖然給讀操作提供了擴展,可如果寫操作也比較多的話(多臺從服務(wù)器還要從主服務(wù)器上面同步數(shù)據(jù)),單主模型的復(fù)制中主服務(wù)器勢必會成為性能瓶頸。
四、原理
1.主從(master-slave)
主服務(wù)器上面的任何修改都會保存在二進制日志Binary log里面,從服務(wù)器上面啟動一個I/O thread(實際上就是一個主服務(wù)器的客戶端進程),連接到主服務(wù)器上面請求讀取二進制日志,然后把讀取到的二進制日志寫到本地的一個Realy log里面。從服務(wù)器上面開啟一個SQL thread定時檢查Realy log,如果發(fā)現(xiàn)有更改立即把更改的內(nèi)容在本機上面執(zhí)行一遍。
2.主從從(master-slave-slave)
一主多從的話,這時主庫既要負責(zé)寫又要負責(zé)為幾個從庫提供二進制日志。此時可以稍做調(diào)整,將二進制日志只給某一從,這一從再開啟二進制日志并將自己的二進制日志再發(fā)給其它從?;蛘呤歉纱噙@個從不記錄只負責(zé)將二進制日志轉(zhuǎn)發(fā)給其它從,這樣架構(gòu)起來性能可能要好得多,而且數(shù)據(jù)之間的延時應(yīng)該也稍微要好一些。
【注意】
1.在老版本的MySQL中,主從復(fù)制的slave段并不是由兩個進程完成的,而是由一個進程完成的,之后就出現(xiàn)了很多風(fēng)險和性能的相關(guān)問題。具體有以下問題:
1.一個進程會使復(fù)制bin-log日志和解析日志并在自身執(zhí)行的過程成為一個串行的過程,性能受到了一定的限制,異步復(fù)制的延遲也會比較長。
2. Slave端從Master端獲取bin-log過來之后,需要接著解析日志內(nèi)容,然后在自身執(zhí)行。在這個過程中,Master端可能又產(chǎn)生了大量變化并新增了大量的日志。如果在這個階段Master端的存儲出現(xiàn)了無法修復(fù)的錯誤,那么在這個階段所產(chǎn)生的所有變更都將永遠無法找回。如果在Slave端的壓力比較大的時候,這個過程的時間可能會比較長。
五、MySQL主從復(fù)制的過程
1.兩種情況:同步復(fù)制和異步復(fù)制,生產(chǎn)環(huán)境中大多數(shù)采用異步復(fù)制。
2. 復(fù)制的基本過程:
1.slave上面的I/O進程連接上master,并請求從指定文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容。
2.Master接收到來自Slave的IO進程的請求后,負責(zé)復(fù)制的IO進程會根據(jù)請求信息讀取日志指定位置之后的日志信息,返回給Slave的IO進程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經(jīng)到Master端的bin-log文件的名稱以及bin-log的位置。
3.Slave的IO進程接收到信息后,將接收到的日志內(nèi)容依次添加到Slave端的relay-log文件的最末端,并將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log的哪個位置開始往后的日志內(nèi)容,請發(fā)給我”。
4.Slave的Sql進程檢測到relay-log中新增加了內(nèi)容后,會馬上解析relay-log的內(nèi)容成為在Master端真實執(zhí)行時候的那些可執(zhí)行的內(nèi)容,并在自身執(zhí)行。
六、配置:
1.首先明確兩種情況:
1.兩臺相互獨立的服務(wù)器或虛擬機。
2.兩臺通過模板創(chuàng)建的虛擬機。
2.下面對兩臺服務(wù)器進行命名,分別為:MySQL主服務(wù)器,MySQL從服務(wù)器。
3.主從服務(wù)器分別進行如下操作:
1.MySQL版本一致
2.初始化表
4.修改MySQL主服務(wù)器和MySQL從服務(wù)器:
vim /etc/my.cnf [mysqld] log-bin=取任意名稱 //啟用二進制日志 server-id=任意取數(shù)字 //服務(wù)器唯一ID,默認值是1,一般設(shè)置為IP地址的最后一段數(shù)字
5.若是第一種情況,直接重啟兩臺服務(wù)器;若是第二種情況,還需將兩臺服務(wù)器的auto.cnf文件重命名為auto.cnf.bak,然后重啟MySQL服務(wù)。
6.在MySQL主服務(wù)器上建立賬戶并授權(quán)slave
grant replication slave on *.* to '用戶名'@'%' identified by '任意密碼';
7.查詢MySQL主服務(wù)器的狀態(tài)
show master status;
8.配置MySQL從服務(wù)器
change master to master_host='MySQL主服務(wù)器IP地址', master_user='之前在MySQL主服務(wù)器上面創(chuàng)建的用戶名', master_password='之前創(chuàng)建的密碼', master_log_file='MySQL主服務(wù)器狀態(tài)中的二進制文件名', master_log_pos='MySQL主服務(wù)器狀態(tài)中的position值';
9.啟用slave
start slave;
10.查看MySQL從服務(wù)器的狀態(tài)
show slave status\G
查看
Slave_IO_Running: Yes //此狀態(tài)必須YES
Slave_SQL_Running: Yes //此狀態(tài)必須YES
全變YES說明主從配置成功,當MySQL主服務(wù)器有更新變化時,從服務(wù)器會根據(jù)具體配置做相應(yīng)的同步。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL通過ibd文件恢復(fù)數(shù)據(jù)的操作過程
通常,在InnoDB存儲引擎下,一個表由三部分組成:數(shù)據(jù)字典(.frm文件)、表空間(.ibd文件)和日志文件,其中,.frm文件存儲了表的定義,.ibd文件存儲了表的數(shù)據(jù)和索引,本文給大家記錄一次MySQL通過ibd文件恢復(fù)數(shù)據(jù)的操作過程,需要的朋友可以參考下2024-10-10mysql安裝navicat之后,出現(xiàn)2059,Authentication plugin及本地鏈接虛擬機docker,
這篇文章主要介紹了mysql安裝navicat之后,出現(xiàn)2059,Authentication plugin及本地鏈接虛擬機docker,遠程鏈接服務(wù)器,需要的朋友可以參考下2020-06-06在SQL中獲取一個長字符串中某個字符串出現(xiàn)次數(shù)的實現(xiàn)方法
以下是對在SQL中獲取一個長字符串中某個字符串出現(xiàn)次數(shù)的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友可以參考下2013-07-07Mysql LONGTEXT 類型存儲大文件(二進制也可以) (修改+調(diào)試+整理)
MySql2.cpp : Defines the entry point for the console application.2009-07-07mysql 使用存儲過程實現(xiàn)樹節(jié)點的獲取方法
這篇文章主要介紹了mysql 使用存儲過程實現(xiàn)樹節(jié)點的獲取方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06mysql中獲取一天、一周、一月時間數(shù)據(jù)的各種sql語句寫法
今天抽時間整理了一篇mysql中與天、周、月有關(guān)的時間數(shù)據(jù)的sql語句的各種寫法,部分是收集資料,全部手工整理,自己學(xué)習(xí)的同時,分享給大家,并首先默認創(chuàng)建一個表、插入2條數(shù)據(jù),便于部分數(shù)據(jù)的測試,其中部分名詞或函數(shù)進行了解釋說明。直入主題2014-05-05解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄
本篇文章是對mysql中的單表distinct、多表group by查詢?nèi)コ貜?fù)記錄進行了詳細的分析介紹,需要的朋友參考下2013-06-06