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; ###動態改變到主服務器的配置