大型網(wǎng)站為了軟解大量的并發(fā)訪問,除了在網(wǎng)站實現(xiàn)分布式負載均衡,遠遠不夠。到了數(shù)據(jù)業(yè)務層、數(shù)據(jù)訪問層,如果還是傳統(tǒng)的數(shù)據(jù)結構,或者只是單單靠一臺服務器扛,如此多的數(shù)據(jù)庫連接操作,數(shù)據(jù)庫必然會崩潰,數(shù)據(jù)丟失的話,后果更是 不堪設想。這時候,我們會考慮如何減少數(shù)據(jù)庫的聯(lián)接,一方面采用優(yōu)秀的代碼框架,進行代碼的優(yōu)化,采用優(yōu)秀的數(shù)據(jù)緩存技術如:memcached,如果資金豐厚的話,必然會想到假設服務器群,來分擔主數(shù)據(jù)庫的壓力。Ok切入今天微博主題,利用MySQL主從配置,實現(xiàn)讀寫分離,減輕數(shù)據(jù)庫壓力。這種方式,在如今很多網(wǎng)站里都有使用,也不是什么新鮮事情,今天總結一下,方便大家學習參考一下。
概述:搭設一臺Master服務器(win8.1系統(tǒng),Ip:192.168.0.104),搭設兩臺Slave服務器(虛擬機——一臺Ubuntu,一臺 Windows Server 2003)
原理:主服務器(Master)負責網(wǎng)站NonQuery操作,從服務器負責Query操作,用戶可以根據(jù)網(wǎng)站功能模特性塊固定訪問Slave服務器,或者自己寫個池或隊列,自由為請求分配從服務器連接。主從服務器利用MySQL的二進制日志文件,實現(xiàn)數(shù)據(jù)同步。二進制日志由主服務器產(chǎn)生,從服務器響應獲取同步數(shù)據(jù)庫。
具體實現(xiàn):
1、在主從服務器上都裝上MySQL數(shù)據(jù)庫,windows系統(tǒng)鄙人安裝的是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 這位不知道大哥還是姐妹,寫的挺好按照這個就能裝上。在安裝的時候可能會出現(xiàn)幾種現(xiàn)象,大家可以參考解決一下:
(1)如果您不是使用root用戶登錄,建議 su - root 切換到Root用戶安裝,那就不用老是 sudo 了。
(2)存放解壓的mysql 文件夾,文件夾名字最好改成mysql
(3)在./support-files/mysql.server start 啟動MySQL的時候,可能會出現(xiàn)一個警告,中文意思是啟動服務運行讀文件時,忽略了my.cnf文件,那是因為my.cnf的文件權限有問題,mysql會認為該文件有危險不會執(zhí)行。但是mysql還會啟動成功,但如果下面配置從服務器參數(shù)修改my.cnf文件的時候,你會發(fā)現(xiàn)文件改過了,但是重啟服務時,修改過后的配置沒有執(zhí)行,而且您 list一下mysql的文件夾下會發(fā)現(xiàn)很多.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上創(chuàng)建一個用戶‘repl’,并允許其他Slave服務器可以通過遠程訪問Master,通過該用戶讀取二進制日志,實現(xiàn)數(shù)據(jù)同步。
1 mysql>create user repl; //創(chuàng)建新用戶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 //給數(shù)據(jù)庫服務的唯一標識,一般為大家設置服務器Ip的末尾號2 log-bin=master-bin3 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=23 relay-log-index=slave-relay-bin.index4 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服務器產(chǎn)生的日志
master_log_pos=0;
(3)啟動Slave
start slave;
4、Slave從服務器(Ubuntu)
(1)找到MySQL安裝文件夾修改my.cnf文件,vim my.cnf
(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服務器產(chǎn)生的日志
master_log_pos=0;
(4)啟動Slave
start slave;
OK所有配置都完成了,這時候大家可以在Master Mysql 中進行測試了,因為我們監(jiān)視的時Master mysql 所有操作日志,所以,你的任何改變主服務器數(shù)據(jù)庫的操作,都會同步到從服務器上。創(chuàng)建個數(shù)據(jù)庫,表試試吧。。。