先來弄MySQL主從複制
那先來說一下什麼是主從複制呢?
主從複制簡單的來說就是建立了個與主資料庫一模一樣的庫和庫環境,人們一般稱之為從資料庫。
MySQL的主從複制是怎麼完成的呢?(主從複制的原理)
主節點:需要指定自己的唯一辨別server-id以及開啟二進制日志(用于記錄主庫增删改的操作),對從資料庫進行授權(權限為replication ,slave)
從節點:需要指定自己的唯一辨別server-id以及開啟中繼日志(用于存放從主節點二進制日志擷取到的日志資訊)需要指定自己的主節點是誰(指定的資訊有哪個節點的位址host,主節點授權的使用者和密碼,要同步主節點那個二進制的資訊,以及從二進制日志的那個位置開始同步)
那MySQL的主從複制的過程又是什麼樣子的呢?
從節點開啟從狀态之後會派生倆個線程,I/O線程和SQL線程。主節點會派生一個dump的線程
I/O線程主要用于去擷取主節點的二進制日志裡的資訊,在I/O線程發送請求時需要指明自己要找的主節點是誰,以及要找的二進制日志的具體位置
主節點的dump線程用來接收并處理I/O線程發送來的請求,将I/O線程請求的内容發送給I/O線程
I/O線程将從主節點擷取到的日志資訊存放在從庫的中繼日志中,I/O線程工作完成(本次工作完成)
為了使主從節點需要執行中繼日志最新擷取的跟SQL語句相關的内容,就是需要SQL線程對中繼日志的SQL語句進行提取之後再執行,來實作主節點的資料同步過程
在這個過程中,從節點擷取到二進制日志資訊之後需要及時更新所記錄的要擷取的二進制日志的偏移量,以確定下次同步不再擷取已經有的操作
從節點中繼日志中的SQL語句執行完成後也需要及時更新中繼日志的偏移量
(大家可以看一下下面這張圖)
下面我們舉個例子:
更改資料庫的配置檔案:
/etc/my.cnf
【mysqld】
Server-id = 1 節點辨別符
log-bin = mysql-bin 開啟二進制日志
主資料庫授權:
從資料庫開啟中繼日志:
進入資料庫連接配接主資料庫;
接下來我們建立一個資料庫驗證一下(主伺服器新建立了一個庫zhaosir)
我們再從伺服器檢視一下(同步完成)
接下來我們來說一下主主結構
什麼是主主結構呢?
簡單的來說就是兩台或者多台資料庫互為主從結構,當有一台發生變化另一台也發生變化,這樣有一個好處就是有了負載均衡的效果。
那麼接下裡我們來做一下多主架構:
我一共用了四台分别為:
結構和大家說一下,主1和主2互為主從,主1和從1為主從,主2和從2為主從。
主1的配置檔案(重新開機)
主2的配置檔案(重新開機)
從1的配置檔案(重新開機)
從2的配置檔案(重新開機)
主1MySQL的配置(連接配接的是主2)
主2的MySQL配置(連接配接的是主1)
從1MySQL連接配接到1
從2MySQL連接配接到主2
架構制作完畢(我們來驗證一下)
在主1建立一個testA,主建立testB。
我們檢視一下