MySQL學習筆記之十六 使用MySQL內建複製功能

    MySQL內部複製功能是建立在兩個或兩個以上服務器之間,通過設定它們之間的主從關係來實現的。其中一個作爲主服務器,其它的作爲從服務器。本節將詳細討論如何配

置兩臺服務器,將一個設爲主服務器,另一個設爲從服務器。並且描述一下在它們之間進行切換的處理過程。

    第一步:配置主服務器

    我們將指定兩臺服務器。A(IP爲192.168.0.1)作爲主服務器(簡稱爲主機)。B(IP爲192.168.0.2)作爲從服務器(簡稱爲從機)。

    1、建立用於備份的帳號

    MySQL的複製功能的實現過程爲:從機(B)與主機(A)連接,然後讀出主機的二進制更新日誌,再將發生的變化合併到自已的數據庫中。從機需要一個用戶帳號來與主機連接,所

以在主機上創建一個帳號,並只給它FILE權限,如下操作:

    mysql>GRANT FILE ON *.* TO [email protected] IDENTIFIED BY 'password';

    爲了從機能夠與主機連接,要在主機上運行'FLUSH PRIVILEGES':

    mysql> 'FLUSH PRIVILEGES;

    2、修改選項文件

    現在我們需要主機數據庫的一個快照,並且對主機進行配置,允許生成二進制的更新日誌。首先編輯'my.cnf'文件,以便允許二進制更新日誌,所以在[mysqld]部分的下面某

個地方增加一行:'log-bin'。在下一次服務器啓動時,主機將生成二進制更新日誌(名爲:<主機名>-bin.<增量序號#>)。

   [mysqld]
    ……
    log-bin

    爲了讓二進制更新日誌有效,關閉MySQL服務程序,然後將主機上的所有數據庫目錄到另一個目錄中,接着重新啓動mysqld。

    3、得到服務器數據庫的一個快照

    請確定得到了所有數據庫,否則在進行復制時,如果一個表在主機上存在但在從機上不存在,將因爲出錯而退出。現在你已經得到了數據的快照,和一個從建立快照以來的

二進制日誌,上面記錄着任何對數據庫的修改。

    請注意MySQL數據文件(*.MYD,*.MYI和*.frm)是不依賴於文件系統的,但是ISAM表的數據文件是依賴系統的,但是MySQL3.23以上均採用MyISAM表。所以你可以僅僅進行文

件傳輸,如從Solaris到Linux。只有你處於一個異種的服務器環境,並且僅僅複製不能共享數據表文件時,你將不得不使用mysqldump實用程序或其它的定製腳本來得到數據快

照,但是這種可能性還是很小的。

   第二步、配置從服務器

    1、遷移主機的數據庫目錄

    停掉從機上的MySQL服務程序,並且把從主機上拷貝來的數據庫目錄移到從機上的data目錄下。請確認將目錄的擁有者和屬組改變爲MySQL用戶相應值,並且修改文件模式爲

660(只對擁有者和屬組可讀、可寫),目錄本身爲770(只對擁有者和屬組可讀、可寫和可執行)。

    在從機上啓動MySQL服務程序,確認MySQL工作正常。運行幾個select查詢(不要update或insert查詢),看一看在第一步中得到的數據快照是否成功。接着,在測試成功後關

掉MySQL服務程序。

    2、修改選項文件

    在從機上配置需要訪問的主機,以便接收主機的更改。所以需要編輯務機上的'my.cnf'文件,在[mysqld]部分中增加下面幾行:

    master-host=192.168.0.1   (視你自己IP而定)
    master-user=replicate
    master-password=password

    在啓動從機服務程序後,從機服務程序將查看在'my.cnf'文件中所指定的主機,查看是否有改變,並且將這些改變合併到自已的數據庫中。從機保持了主機的更新記錄,這

些記錄是從主機的'master.info'文件中接收下來的。從機線程的狀態可以通過sql命令'SHOW SLAVE-STATUS'看到。在從機上處理二進制日誌中如果發生錯誤,都將導致從機線

程的退出,並且在*.err的日誌文件中生成一條信息。然後錯誤可以被改正,接着可以使用sql語句'SLAVE START'來重新啓動從機線程。線程將從主機二進制日誌處理中斷的地

方繼續處理。

    至此,在主機上所發生的數據改變應該已經複製到從機上了,要測試它,你可以在主機上插入或更新一條記錄,而在從機上選擇這條記錄。

    現在我們擁有了從A機到B機的這種主-從關係,這樣當A機可能當機的時候,允許我們將所有的查詢重定向到B機上去,但是當A機恢復時,我們沒有辦法將發生的改變恢復到

A機中去。爲了解決這個問題,我們創建從B機到A機的主-從關係。

    第三步、創建相互的主從關係

    1、從機配置

    首先在B機上的my.cnf文件中,在[mysqld]部分中加入'log-bin',接着重新啓動mysqld,然後創建可在它的上面執行復制功能的用戶帳號,使用:

    GRANT FILE ON *.* TO [email protected] IDENTIFIED BY 'password';

    在B機上運行'FLUSH PRIVILEGES'命令,以便裝入在加入複製用戶後的新的授權表。

    2、主機配置

    接着回到A機上,在它的'my.cnf'中加入下面幾行:

    master-host=192.168.0.2  (視你自己IP而定)

    master-user=replicate

    master-password=password

    在重啓A機的服務程序之後,現在我們一擁有了在A機與B機之間的相互主-從關係。不管在哪個服務器上更新一條記錄或插入一條記錄,都將被複制到另一臺服務器上。要注

意的是:我不敢確定一個從機合併二進制日誌變化的速度有多快,所以用這種方法來進行插入或更新語句的負載平衡可能不是一個好辦法。

發佈了66 篇原創文章 · 獲贊 3 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章