1. 程式人生 > >黃聰:Mysql主從配置,實現讀寫分離

黃聰:Mysql主從配置,實現讀寫分離

大型網站為了軟解大量的併發訪問,除了在網站實現分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器扛,如此多的資料庫連線操作,資料庫必然會崩潰,資料丟失的話,後果更是 不堪設想。這時候,我們會考慮如何減少資料庫的聯接,一方面採用優秀的程式碼框架,進行程式碼的優化,採用優秀的資料快取技術如:memcached,如果資金豐厚的話,必然會想到假設伺服器群,來分擔主資料庫的壓力。Ok切入今天微博主題,利用MySQL主從配置,實現讀寫分離,減輕資料庫壓力。這種方式,在如今很多網站裡都有使用,也不是什麼新鮮事情,今天總結一下,方便大家學習參考一下。

概述:搭設一臺Master伺服器(win8.1系統,Ip:192.168.0.104),搭設兩臺Slave伺服器(虛擬機器——一臺Ubuntu,一臺 Windows Server 2003)

原理:主伺服器(Master)負責網站NonQuery操作,從伺服器負責Query操作,使用者可以根據網站功能模特性塊固定訪問Slave伺服器,或者自己寫個池或佇列,自由為請求分配從伺服器連線。主從伺服器利用MySQL的二進位制日誌檔案,實現資料同步。二進位制日誌由主伺服器產生,從伺服器響應獲取同步資料庫。

具體實現:

1、在主從伺服器上都裝上MySQL資料庫,windows系統鄙人安裝的是mysql_5.5.25.msi版本,Ubuntu安裝的是mysql-5.6.22-linux-glibc2.5-i686.tar

windows安裝mysql就不談了,一般地球人都應該會。鄙人稍微說一下Ubuntu的MySQL安裝,我建議不要線上下載安裝,還是離線安裝的好。大家可以參考 

 http://www.linuxidc.com/Linux/2013-01/78716.htm 這位不知道大哥還是姐妹,寫的挺好按照這個就能裝上。在安裝的時候可能會出現幾種現象,大家可以參考解決一下:

(1)如果您不是使用root使用者登入,建議 su - root 切換到Root使用者安裝,那就不用老是 sudo 了。

(2)存放解壓的mysql 資料夾,資料夾名字最好改成mysql

(3)在./support-files/mysql.server start 啟動MySQL的時候,可能會出現一個警告,中文意思是啟動服務執行讀檔案時,忽略了my.cnf檔案,那是因為my.cnf的檔案許可權有問題,mysql會認為該檔案有危險不會執行。但是mysql還會啟動成功,但如果下面配置從伺服器引數修改my.cnf檔案的時候,你會發現檔案改過了,但是重啟服務時,修改過後的配置沒有執行,而且您 list一下mysql的資料夾下會發現很多.my.cnf.swp等中間檔案。這都是因為MySQL啟動時沒有讀取my.cnf的原因。這時只要將my.cnf的檔案許可權改成my_new.cnf的許可權一樣就Ok,命令:chmod 644 my.cnf就Ok

(4)Ubuntu中修改文件內容沒有Vim,最好把Vim 裝上,apt-get install vim,不然估計會抓狂。

這時候我相信MySQL應該安裝上去了。

2、配置Master主伺服器

(1)在Master MySQL上建立一個使用者‘repl’,並允許其他Slave伺服器可以通過遠端訪問Master,通過該使用者讀取二進位制日誌,實現資料同步。

1 mysql>create user repl; //建立新使用者
2 //repl使用者必須具有REPLICATION SLAVE許可權,除此之外沒有必要新增不必要的許可權,密碼為mysql。說明一下192.168.0.%,這個配置是指明repl使用者所在伺服器,這裡%是萬用字元,表示192.168.0.0-192.168.0.255的Server都可以以repl使用者登陸主伺服器。當然你也可以指定固定Ip。
3 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';

(2)找到MySQL安裝資料夾修改my.Ini檔案。mysql中有好幾種日誌方式,這不是今天的重點。我們只要啟動二進位制日誌log-bin就ok。

 在[mysqld]下面增加下面幾行程式碼

1 server-id=1   //給資料庫服務的唯一標識,一般為大家設定伺服器Ip的末尾號
2 log-bin=master-bin
3 log-bin-index=master-bin.index

(3)檢視日誌

mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

重啟MySQL服務

3、配置Slave從伺服器(windows)

(1)找到MySQL安裝資料夾修改my.ini檔案,在[mysqld]下面增加下面幾行程式碼

1 [mysqld]
2 server-id=2
3 relay-log-index=slave-relay-bin.index
4 relay-log=slave-relay-bin 

重啟MySQL服務

(2)連線Master

change master to master_host='192.168.0.104', //Master 伺服器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master伺服器產生的日誌
master_log_pos=0;

(3)啟動Slave

start slave;

4、Slave從伺服器(Ubuntu)

(1)找到MySQL安裝資料夾修改my.cnf檔案,vim my.cnf

 s

 

(2) ./support-files/myql.server restart 重啟MySQL服務  ,  ./bin/mysql 進入MySQL命令視窗 

(3)連線Master

change master to master_host='192.168.0.104', //Master 伺服器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master伺服器產生的日誌
master_log_pos=0;

(4)啟動Slave

start slave;

OK所有配置都完成了,這時候大家可以在Master Mysql 中進行測試了,因為我們監視的時Master mysql  所有操作日誌,所以,你的任何改變主伺服器資料庫的操作,都會同步到從伺服器上。建立個數據庫,表試試吧。。。