一析蝴、實驗?zāi)繕?/strong>
搭建兩臺MySQL服務(wù)器,一臺作為主服務(wù)器绿淋,一臺作為從服務(wù)器闷畸,主服務(wù)器進行寫操作,從服務(wù)器進行讀操作吞滞。
二佑菩、測試環(huán)境
主數(shù)據(jù)庫: CentOS7, MySQL15.1 裁赠, 192.168.1.233
從數(shù)據(jù)庫: CentOS7殿漠, MySQL15.1 , 192.168.1.234
三佩捞、主從配置步驟
1绞幌、確保主數(shù)據(jù)庫與從數(shù)據(jù)庫里的數(shù)據(jù)一樣
例如:主數(shù)據(jù)庫里的a的數(shù)據(jù)庫里有b,c一忱,d表莲蜘,那從數(shù)據(jù)庫里的就應(yīng)該有一個模子刻出來的a的數(shù)據(jù)庫和b,c帘营,d表
我這里在兩臺MySQL上都創(chuàng)建了個名為“test”的數(shù)據(jù)庫來測試票渠,如圖:
2、在主數(shù)據(jù)庫里創(chuàng)建一個同步賬號
1)每個從數(shù)據(jù)庫會使用一個MySQL賬號來連接主數(shù)據(jù)庫芬迄,所以我們要在主數(shù)據(jù)庫里創(chuàng)建一個賬號问顷,并且該賬號要授予 REPLICATION SLAVE 權(quán)限,你可以為每個從數(shù)據(jù)庫分別創(chuàng)建賬號禀梳,當然也可以用同一個6耪)
2)你可以用原來的賬號不一定要新創(chuàng)賬號出皇,但你應(yīng)該注意荷科,這個賬號和密碼會被明文存放在master.info文件中胆胰,因此建議單獨創(chuàng)一個只擁有相關(guān)權(quán)限的賬號,以減少對其它賬號的危害!)
3)創(chuàng)建新賬號使用“CREATE USER”别垮,給賬號授權(quán)使用“GRANT”命令碳想,如果你僅僅為了主從復(fù)制創(chuàng)建賬號预吆,只需要授予REPLICATION SLAVE權(quán)限觅够。
4)下面來創(chuàng)建一個賬號,賬號名:repl窘拯,密碼:repl123,只允許192.168.1.的IP段登錄,如下:
mysql> CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'repl123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
5)如果開發(fā)防火墻舆乔,可能要配置下端口,如下:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
3颜武、配置主數(shù)據(jù)庫
1)要主數(shù)據(jù)庫绿贞,你必須要啟用二進制日志(binary logging),并且創(chuàng)建一個唯一的Server ID拒名,這步驟可能要重啟MySQL。
2)主服務(wù)器發(fā)送變更記錄到從服務(wù)器依賴的是二進制日志,如果沒啟用二進制日志,復(fù)制操作不能實現(xiàn)(主庫復(fù)制到從庫)旱易。
3)復(fù)制組中的每臺服務(wù)器都要配置唯一的Server ID笆檀,取值范圍是1到(232)?1士修,你自己決定取值登淘。
4)配置二進制日志和Server ID阔籽,你需要關(guān)閉MySQL和編輯my.cnf或者my.ini文件,在 [mysqld] 節(jié)點下添加配置证薇。
5)下面是啟用二進制日志鸦概,日志文件名以“mysql-bin”作為前綴咨察,Server ID配置為1赴肚,如下:
[mysqld]
log-bin=mysql-bin
server-id=1
#網(wǎng)絡(luò)上還有如下配置
#binlog-do-db=mstest //要同步的mstest數(shù)據(jù)庫,要同步多個數(shù)據(jù)庫,就多加幾個replicate-db-db=數(shù)據(jù)庫名 #binlog-ignore-db=mysql //要忽略的數(shù)據(jù)庫
提示1:如果你不配置server-id或者配置值為0二蓝,那么主服務(wù)器將拒絕所有從服務(wù)器的連接誉券。
提示2:在使用InnoDB的事務(wù)復(fù)制,為了盡可能持久和數(shù)據(jù)一致刊愚,你應(yīng)該在my.cnf里配置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1踊跟;
For the greatest possible durability and consistency in a replication setup using InnoDB
with transactions, you should useinnodb_flush_log_at_trx_commit=1
and sync_binlog=1
in the master my.cnf
file.
提示3:確保主服務(wù)器里的skip-networking選項未啟用,如果網(wǎng)絡(luò)被禁用,你的從服務(wù)器將不能與主服務(wù)器通信并且復(fù)制失敗商玫。
注意:
實際操作發(fā)現(xiàn) /etc/my.cnf文件和教材說的不一樣箕憾,可能我裝的是MariaDB,如下:
目測文件被放到了 /etc/my.cnf.d 目錄里拳昌,如下:
在 /etc/my.cnf.d/server.cnf 增加相關(guān)配置袭异,如下:
重啟MySQL,如圖:
查看主服務(wù)器狀態(tài)炬藤,mysql> show master status;御铃, 如圖:
(注意:記錄好File和Position,后面要用)
4沈矿、配置從數(shù)據(jù)庫
1)從服務(wù)器上真,同理,要分配一個唯一的Server ID羹膳,需要關(guān)閉MySQL睡互,修改好后再重啟,如下:
[mysqld]
server-id=2
#可以指定要復(fù)制的庫
-
replicate-do-db = test #
在master端不指定binlog-do-db陵像,在slave端用replication-do-db來過濾 replicate-ignore-db = mysql #忽略的庫
#網(wǎng)上還有下面配置
#relay-log=mysqld-relay-bin
提示1:如果有多個從服務(wù)器就珠,每個服務(wù)器的server-id不能重復(fù),跟IP一樣是唯一標識醒颖,如果你沒設(shè)置server-id或者設(shè)置為0嗓违,則從服務(wù)器不會連接到主服務(wù)器。
提示2:一般你不需要在從服務(wù)器上啟用二進制日志图贸,如果你在從服務(wù)器上啟用二進制日志,那你可用它來做數(shù)據(jù)備份和崩潰恢復(fù)冕广,或者做更復(fù)雜的事情(比如這個從服務(wù)器用來當作其它從服務(wù)器的主服務(wù)器)疏日。
2)配置連接主服務(wù)器的信息
mysql> stop slave;
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.233',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl123',
-> MASTER_LOG_FILE='mysql-bin.000002',
-> MASTER_LOG_POS=313;
- mysql> start slave;
3)查看從服務(wù)器狀態(tài)
mysql> show slave status \G;
5、測試數(shù)據(jù)同步
測試撒汉,連接主服務(wù)器 192.168.1.233沟优,添加了表 stu_user,
然后再連接上 192.168.1.234睬辐,發(fā)現(xiàn)也自己同步創(chuàng)建了表 stu_user挠阁,如圖:
然后在主數(shù)據(jù)庫添加一條記錄,從數(shù)據(jù)庫也自動添加了記錄溯饵,如圖:
至此侵俗,主從的配置已經(jīng)完成了, 目前是在從庫里面配置復(fù)制“test”這個庫丰刊,
如果要添加其它庫隘谣,可以在主服務(wù)器中添加“binlog-do-db”配置,或者在從服務(wù)器中添加“replicate-do-db”配置啄巧。
四寻歧、讀寫分離實現(xiàn)
主從配置是讀寫分離的前提掌栅,現(xiàn)在前提已經(jīng)配置好了,讀寫分離就看具體項目的實現(xiàn)码泛,
讀寫分離猾封,就是“寫”的操作都在主數(shù)據(jù)庫,“讀”的操作都在從數(shù)據(jù)庫噪珊!
這里我選用一個比較輕量的框架SpeedPHP來做讀寫分離演示晌缘,
這個框架做讀寫分離非常簡單,按要求在配置文件填好信息即可卿城,如圖:
簡單寫了些增加/刪除/查詢的方法枚钓,如圖:
頁面效果如下圖:
再來看看兩個數(shù)據(jù)庫,信息一致瑟押,如圖:
這個例子中搀捷,
讀取賬號列表的是從 192.168.1.234 (從數(shù)據(jù)庫)上面的數(shù)據(jù)庫操作的,
添加和刪除賬號是從 192.168.1.233 (主數(shù)據(jù)庫)上面的數(shù)據(jù)庫操作的多望,
實現(xiàn)了讀寫分離嫩舟!
原文轉(zhuǎn)至: http://blog.csdn.net/envon123/article/details/76615059
參考:
官方文檔:https://dev.mysql.com/doc/refman/5.5/en/replication-howto.html
mysql主從配置(清晰的思路):http://www.cnblogs.com/sustudy/p/4174189.html
MySQL5.6 數(shù)據(jù)庫主從(Master/Slave)同步安裝與配置詳解:http://blog.csdn.net/xlgen157387/article/details/51331244
MySQL主從架構(gòu)配置:http://blog.csdn.net/jiangsyace/article/details/50556240