Mysql有關複製

orchidllh發表於2005-06-22

Chapter 6. Replication in MySQL

6.1. Introduction to Replication

Mysql 3.23以上版本支援單向複製,一個伺服器作為主伺服器,一個或者多個其他的伺服器作為從伺服器。

主伺服器寫更新到二進位制的日誌檔案,日誌迴圈紀錄,保持一個索引。從伺服器通知主伺服器它最後成功更新的日誌點,取得這點之後的所有更新並同步,然後等待主伺服器通知新的更新。

從伺服器也可以作為主伺服器,如果你建立鏈狀的複製。注意,如果你使用複製,則所有的更新應該在主伺服器上執行,否則會出現主從之間的資料衝突。

單向複製特點:

² 如果主伺服器有問題,可以切換到從伺服器

² 可以在從伺服器上執行查詢操作,降低主伺服器的負載。

² 可以在從伺服器上執行備份,以避免影響主伺服器。


6.2. Replication Implementation Overview

複製是基於主伺服器的二進位制日誌,所以必須開啟二進位制日誌。(這裡和oracle的歸檔機制很類似)

從伺服器接受主伺服器的日誌並更新以保持和主伺服器的同步。

從伺服器必須在主伺服器啟動二進位制日誌以後開始建立,否則不能同步。

可以使用LOAD DATA FROM MASTER語法拷貝主資料庫德資料,這個命令在4.0.0以後提供,而且只可以針對MYISAM型別的表。這個命令執行的時候,在表上建立一個全域性的讀鎖,所以在資料傳輸到從伺服器時,不能執行更新操作。

推薦在傳輸的資料集比較小或者主資料庫可以接受比較長時間的鎖定的前提下使用這個語法。

LOAD DATA FROM MASTER的速度隨系統的不同而不同,但是粗略統計是1秒鐘1M資料,如果你的主從伺服器作業系統大致等同於700M奔騰100M網路卡,則應該接近於這個值。

在從伺服器按照主伺服器建立以後,從伺服器會連線到主伺服器並等待更新,如果和主伺服器的連線出現問題,會週期性的重試,重試的時間間隔由引數--master-connect-retry設定,預設是60秒。

當前需要更新那個日誌以及更新了哪些日誌都記錄在從伺服器中,不會記錄在主伺服器中。

6.3. Replication Implementation Details

複製通過三個程式來實現,一個在主伺服器上執行,兩個在從伺服器上執行。當執行了START SLAVE命令以後,從伺服器建立了一個I/O執行緒,這個執行緒連線到主伺服器,請求二進位制的日誌檔案。主伺服器建立一個執行緒傳送檔案到從伺服器,如果你在主伺服器上使用SHOW PROCESSLIST顯示程式,則Binlog Dump就是這個執行緒。從伺服器讀主伺服器的Binlog Dump執行緒傳送的內容,拷貝到一個叫relay logs的目錄。第三個執行緒是sql執行緒,是在從伺服器上讀relay logs並且更新內容的。

一個主伺服器可以對應多個從伺服器,在主伺服器上啟動一個執行緒對應從伺服器,每個從伺服器上都啟動自己的I/Osql執行緒。

4.0.2之前的版本中,複製只包括兩個執行緒,在主從伺服器上各一個,從伺服器上的拷貝和執行是一個執行緒,不需要寫relay logs

那麼把拷貝和執行拆成兩個單獨得任務的好處是拷貝和執行的速度是不同的,這和oracle是類似的,拷貝和執行的程式是分開的,互相沒有影響。

我們可以在主伺服器上看到的程式:

mysql> show processlist G

*************************** 1. row ***************************

Id: 19

User: root

Host: localhost

db: lisa_db

Command: Query

Time: 0

State: NULL

Info: show processlist

*************************** 2. row ***************************

Id: 23

User: repl

Host: *:32796

db: NULL

Command: Binlog Dump

Time: 449

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

2 rows in set (0.00 sec)

我們可以在從伺服器上看到的程式:

mysql> show processlist G

*************************** 1. row ***************************

Id: 8

User: root

Host: localhost

db: NULL

Command: Query

Time: 0

State: NULL

Info: show processlist

*************************** 2. row ***************************

Id: 9

User: system user

Host:

db: NULL

Command: Connect

Time: 486

State: Waiting for master to send event

Info: NULL

*************************** 3. row ***************************

Id: 10

User: system user

Host:

db: NULL

Command: Connect

Time: 486

State: Has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

3 rows in set (0.00 sec)

6.3.1. Replication Master Thread States

以下列出的是常見的主伺服器Binlog Dump執行緒的狀態,如果看不到這個程式,則複製沒有執行。

Sending binlog event to slave

Finished reading one binlog; switching to next binlog

Has sent all binlog to slave; waiting for binlog to be updated

Waiting to finalize termination

6.3.2. Replication Slave I/O Thread States

以下列出的是常見的從伺服器I/O執行緒的狀態,從4.1.1開始,這個狀態也可以通過SHOW SLAVE STATUS命令的Slave_IO_State列顯示。

Connecting to master

Checking master version

Registering slave on master

Requesting binlog dump

Waiting to reconnect after a failed binlog dump request

Reconnecting after a failed binlog dump request

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-180646/,如需轉載,請註明出處,否則將追究法律責任。

相關文章