MYSQL主從服務器配置工作原理

MYSQL主從伺服器配置工作原理

 

一、        主從配置的原理:

Mysql的 Replication 是一個異步的復制過程,從一個 Mysql instace(我們稱之為 Master)復制到另一個

Mysql instance(我們稱之 Slave)。在 Master 與 Slave

之間的實現整個復制過程主要由三個線程來完成,其中兩個線程(Sql線程和IO線程)在 Slave 端,另外一個線程(IO線程)在 Master

端。

  要實現 MySQL 的 Replication ,首先必須打開 Master 端的Binary

Log(mysql-bin.xxxxxx)功能,否則無法實現。因為整個復制過程實際上就是Slave從Master端獲取該日志然後再在自己身上完全

順序的執行日志中所記錄的各種操作。打開 MySQL 的 Binary Log 可以通過在啟動 MySQL Server 的過程中使用

“—log-bin” 參數選項,或者在 my.cnf 配置文件中的 mysqld 參數組([mysqld]標識後的參數部分)增加

“log-bin” 參數項。

  MySQL 復制的基本過程如下:

  1. Slave 上面的IO線程連接上 Master,並請求從指定日志文件的指定位置(或者從最開始的日志)之後的日志內容;

 

   2. Master 接收到來自 Slave 的 IO 線程的請求後,通過負責復制的 IO

線程根據請求信息讀取指定日志指定位置之後的日志信息,返回給 Slave 端的 IO

線程。返回信息中除瞭日志所包含的信息之外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 Binary

Log 中的位置;

  3. Slave 的 IO 線程接收到信息後,將接收到的日志內容依次寫入到 Slave 端的Relay

Log文件(mysql-relay-bin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的文件名和位置記錄到master-

info文件中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log的哪個位置開始往後的日志內容,請發給我”

 

   4. Slave 的 SQL 線程檢測到 Relay Log 中新增加瞭內容後,會馬上解析該 Log 文件中的內容成為在 Master

端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave

端執行瞭同樣的 Query,所以兩端的數據是完全一樣的。

二、        設置mysql主從配置的優點:

1、        解決web應用系統,資料庫出現的性能瓶頸,采用資料庫集群的方式來實現查詢負載;一個系統中資料庫的查詢操作比更新操作要多得多,通過多臺查詢伺服器將資料庫的查詢分擔到不同的查詢伺服器上從而提高查詢效率。

2、        Mysql資料庫支持資料庫的主從復制功能,使用主資料庫進行數據的插入、刪除與更新操作,而從資料庫則專門用來進行數據查詢操作,這樣可以將更新操作和查詢操作分擔到不同的資料庫上,從而提高瞭查詢效率。

三、        主從資料庫伺服器的配置

1、        主資料庫伺服器的配置

(1)、修改mysql的配置文件(/etc/my.cnf)在配置文件中設置:

server-id       = 1   ###每一個資料庫伺服器都要制定一個唯一的server-id,通常主伺服器制定為1。

log-bin=mysql-bin     ###mysql進行主從復制是通過二進制的日志文件來進行的,所以必須開啟mysql的日志功能

(這個是/etc/my.cnf的默認配置,保持不變即可)

(2)、GRANT REPLICATION SLAVE ON *.* TO ' replication'@'172.28.3.41' IDENTIFIED BY 'koncept';        #####給主資料庫伺服器授予一個可以進行復制的用戶,172.28.3.41為從伺服器的IP,這樣從伺服器就能有錢先來訪問主資料庫伺服器

2、從資料庫伺服器的設置

修改資料庫配置文件/etc/my.cnf,配置如下內容:

   #server-id      = 1  ####必須把server-id      = 1註釋掉,

   server-id       = 2  ####設置從的ID號

   master-host     =  172.28.3.43  #####設置主伺服器的IP

   master-user     =   replication  #####設置連接主伺服器的用戶名

   master-password =   concept     #####設置連接主伺服器的密碼

   replicate-do-db=imtest0  ######設置你要同步的資料庫,可以設置多個   

####就是我們前面建的用戶名和密碼,另外如果有端口號的變化還要配置端口

master-port     =  <port> 配置成你設置的端口就OK瞭!

3、分別重新啟動主從伺服器 #### 如果不重新啟動主伺服器在後面查看status的時候會出現問題!

4在從伺服器上登錄mysql,輸入:show slave status\G  如果發現有:

  Slave_IO_Running: Yes

Slave_SQL_Running: Yes

  就說明已經成功瞭,如果這兩個選項不全是Yes,那就說明你錢面的某個配置錯瞭,

  我做的時候沒有把主伺服器重啟,就出現  Slave_IO_Running: NO。重啟後好瞭!

四、        監控伺服器的狀態

1、        監控主伺服器的狀態

可通過show master status來監控主伺服器的狀態,內容如下:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     1164 |              |                  |
+------------------+----------+--------------+------------------+

 

#####其中File表示日志文件記錄,Position表示日志文件的位置,這個也是資料庫執行復制操作的必須標識,後面兩字段表示復制的資料庫名和不復制的資料庫名,也可以在配置文件中你進行配置。

2、        監控從伺服器的狀態

可以通過:show slave status\G來查看,另外如果從資料庫在復制的過程中出現問題,可以通過命令reset slave從資料庫伺服器復制的線程,從資料庫伺服器的通常操作命令有:

start slave;  ####啟動復制線程

stop slave;  ####停止復制線程

reset slave;  ####重置復制線程

change master to; ###動態改變到主伺服器的配置

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。