Mysql 如何做雙機熱備和負載均衡

做雙機熱備和負載均衡,master/slave , master/master

 

(1)

先簡要介紹一下mysql雙向熱備:mysql從3.23.15版本以後提供數據庫複製功能。利用該功能可以實現兩個數據庫同步,主從模式(A->B),互相備份模式(A<=>B)的功能。

mysql數據庫雙向熱備的操作實際說明:

1、mysql數據庫同步複製功能的設置都在mysql的配置文件中體現。在linux環境下的配置文件一般在/etc/mysql/my.cnf或者在 mysql用戶的home目錄下的my.cnf,筆者的my.cnf則在/etc/my.cnf;windows環境下則可到mysql安裝路徑下找到 my.ini。

2、配置數據同步(A->B)(以mysql版本 5.0.26爲例):

假設數據庫A爲主機:
A機器:
IP = 192.168.1.101
B機器:
IP = 192.168.1.102

(1)在A機器中有數據庫如下:

//數據庫A

  1. CREATE DATABASE backup_db;

  2. USE backup_db;

 

(2)

MySQL數據庫沒有增量備份的機制,但它提供了一種主從備份的機制,就是把主數據庫的所有的數據同時寫到備份數據庫中。實現MySQL數據庫的熱備份。

下面是具體的主從熱備份的步驟:
假設主服務器A(master)、從服務器爲B(slave)
A:192.168.0.104
B:192.168.0.169
1.主服務器授權
授權副服務器可以連接主服務器並可以進行更新。這是在主服務器上進行的,創建一個username和password供副服務器訪問時使用。也可以使用主服務器默認的帳號和密碼。
2.數據複製
將master上已有的數據複製到slave上,以便主從數據庫建立的時候兩個數據庫的數據保持一致。導出導入數據庫就不詳述了。
3.配置主服務器
修改master上mysql的根目錄下的my.ini配置文件
在選項配置文件中賦予主服務器一個server-id,該id必須是1到2^23-1範圍內的唯一值。主服務器和副服務器的server-id不能相同。另外,還需要配置主服務器,使之啓用二進制日誌,即在選項配置文件中添加log-bin啓動選項。
注意:如果主服務器的二進制日誌已經啓用,關閉並重新啓動之前應該對以前的二進制日誌進行備份。重新啓動後,應使用RESET MASTER語句清空以前的日誌。
原因:master上對數據庫cartrader的一切操作都記錄在日誌文件中,然後會把日誌發給slave,slave接收到master傳來的日誌文 件之後就會執行相應的操作,使slave中的數據庫做和master數據庫相同的操作。所以爲了保持數據的一致性,必須保證日誌文件沒有髒數據。
4.重啓master
配置好以上選項後,重啓MySQL服務,新選項將生效。現在,所有對數據庫中信息的更新操作將被寫進日誌中。
5.配置slave
在副服務器上的MySQL選項配置文件中添加以下參數:

  1. [mysqld]

  2. #唯一,並與主服務器上的server-id不同。

  3. server-id=2

  4. #主服務器的主機名或者ip地址

  5. master-host=192.168.0.104

  6. #如果主服務器沒有在默認的端口上監聽,則需確定master-port選項

  7. master-port=3306

  8. #步驟2.1中創建的用戶名和密碼

  9. master-user=root

  10. master-password=123456

  11. #複製操作要針對的數據庫(可選,默認爲全部)

  12. replicate-do-db=cartrader

  13. #如果主副服務器間連接經常失敗,需增加master-retry-count和master-connect-retry

  14. #master-retry-count連接重試的次數

  15. #master-connect-retry 連接失敗後等待的秒數

  16. master-retry-count =999

  17. master-connect-retry=60

5.重啓slave
副服務器上MySQL服務重啓後,還在數據目錄中創建一個master.info文件,其中包含
所有有關複製過程的信息(連接主服務器的相關信息及與主服務器交換數據的相關信息)。在初次啓動以後,副服務器將檢查這個master.info文件,以得到相關信息。
如果想修改複製選項,刪除master.info並重啓MySQL服務,在啓動過程中使用選項配置文件中的新選項進行重新創建了master.info文件。
將主服務器上備份好的數據庫腳本文件(cartrader.sql)導入到副服務器數據庫中,以便保
證主-副服務器上進行復制操作的起點一樣。
6.查看master的狀態與設置的是否一致
7.查看slave
一般情況下重啓了slave之後,自動就會開啓複製功能,可以通過下面的語句查看
在slave上

  1. mysql>show slave status

如果顯示waiting for master to send event 的話就表示已經啓動了,反之就運行

  1. mysql>start slave

來啓動slave

在SHOW SLAVE STATUS的命令輸出後,應該包含Slave_IO_Running對應的值爲YES,
Slave_SQL_Running對應的值爲YES,只有這樣才保證主從機能正常備份。

暫時停止主從熱備份的命令是:

  1. mysql>stop slave

  1. CREATE TABLE `backup_table`(

  2. `id`int(11) NOT NULL auto_increment,

  3. `name` varchar(20) character set utf8 NOT NULL,

  4. `sex` varchar(2) character set utf8 NOT NULL,

  5. PRIMARY KEY (`id`)

  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

A機器的my.cnf(或my.ini)中應該配置:

  1. server-id=1

  2. log-bin=c:\mysqlback #同步事件的日誌記錄文件

  3. binlog-do-db=backup_db #提供數據同步服務的數據庫

(2)在B機器中有數據庫如下:

//數據庫B

  1. CREATE DATABASE backup_db;

  2. USE backup_db;

  3. CREATE TABLE `backup_table`(

  4. `id`int(11) NOT NULL auto_increment,

  5. `name` varchar(20) character set utf8 NOT NULL,

  6. `sex` varchar(2) character set utf8 NOT NULL,

  7. PRIMARY KEY (`id`)

  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

注:數據庫A和B的數據庫結構一定要相同,否則無法構成同步。

B機器的my.cnf(或my.ini)中應該配置:

  1. server-id=2

  2. master-host=192.168.1.101#主機A的地址

  3. master-user=ym #主機A提供給B的用戶,該用戶中需要包括數據庫backup_db的權限

  4. master-password=ym #訪問密碼

  5. master-port=3306#端口,主機的MYSQL端口

  6. master-connect-retry=60#重試間隔60秒

  7. replicate-do-db=backup_db #同步的數據庫

(3)完成了以上配置之後,將A的mysql數據的權限給B。

A機器:

  1. mysql>GRANT FILE ON *.* TO ym@192.168.1.102 IDENTIFIEDBY ym’;

(4)重啓AB數據庫,後:

B機器:

  1. mysql>slave start;

查看同步配置情況

A機器:

  1. mysql>show master status;

B機器:

  1. mysql>show slave status;

(5)在A中的backup_db.backup_table表中插入一些數據,查看B中的backup_db.backup_table表是否同步了數據改動。如果沒有看到同步數據結果,即同步不成功,請查看錯誤(如下)。

當有錯誤產生時*.err日誌文件(可到mysql安裝目錄下找),同步的線程退出。當糾正錯誤後重復步驟(4)。

3、實現雙向熱備(A<=>B):

將以上的(1)-(5)步驟按A-B雙向配置即可。

總結一下:

主要是兩邊建立同樣的數據庫,然後在數據庫配置文件里加入更新的語句即可。
相互開通互有權限的用戶,然後這條命令就是同步頻率和同步數據庫:

  1. master-connect-retry=60#重試間隔60秒

  2. replicate-do-db=backup_db #同步的數據庫

 

 

 

 

轉自:http://www.dewen.org/q/51/Mysql+%E5%A6%82%E4%BD%95%E5%81%9A%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87%E5%92%8C%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章