CentOS7,MySQL主從配置和讀寫分離(MySQL主從、讀寫分離、分佈式、數據庫讀寫分離、主從配置)

一、實驗目標
搭建兩臺MySQL服務器,一臺作爲主服務器,一臺作爲從服務器,主服務器進行寫操作,從服務器進行讀操作。

二、測試環境
主數據庫: CentOS7, MySQL15.1 , 192.168.1.233
從數據庫: CentOS7, MySQL15.1 , 192.168.1.234

三、主從配置步驟

1、確保主數據庫與從數據庫裏的數據一樣
例如:主數據庫裏的a的數據庫裏有b,c,d表,那從數據庫裏的就應該有一個模子刻出來的a的數據庫和b,c,d表
我這裏在兩臺MySQL上都創建了個名爲“test”的數據庫來測試,如圖:

 

2、在主數據庫裏創建一個同步賬號

1)每個從數據庫會使用一個MySQL賬號來連接主數據庫,所以我們要在主數據庫裏創建一個賬號,並且該賬號要授予 REPLICATION SLAVE 權限,你可以爲每個從數據庫分別創建賬號,當然也可以用同一個!)

2)你可以用原來的賬號不一定要新創賬號,但你應該注意,這個賬號和密碼會被明文存放在master.info文件中,因此建議單獨創一個只擁有相關權限的賬號,以減少對其它賬號的危害!)

3)創建新賬號使用“CREATE USER”,給賬號授權使用“GRANT”命令,如果你僅僅爲了主從複製創建賬號,只需要授予REPLICATION SLAVE權限。

4)下面來創建一個賬號,賬號名:repl,密碼:repl123,只允許192.168.1.的IP段登錄,如下:
  1. mysql> CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'repl123';
  2. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
5)如果開發防火牆,可能要配置下端口,如下:
  1. firewall-cmd --zone=public --add-port=3306/tcp --permanent
  2. firewall-cmd --reload


3、配置主數據庫

1)要主數據庫,你必須要啓用二進制日誌(binary logging),並且創建一個唯一的Server ID,這步驟可能要重啓MySQL。
2)主服務器發送變更記錄到從服務器依賴的是二進制日誌,如果沒啓用二進制日誌,複製操作不能實現(主庫複製到從庫)。
3)複製組中的每臺服務器都要配置唯一的Server ID,取值範圍是1到(232)−1,你自己決定取值。
4)配置二進制日誌和Server ID,你需要關閉MySQL和編輯my.cnf或者my.ini文件,在 [mysqld] 節點下添加配置。
5)下面是啓用二進制日誌,日誌文件名以“mysql-bin”作爲前綴,Server ID配置爲1,如下:
  1. [mysqld]
  2. log-bin=mysql-bin
  3. server-id=1
  4. #網絡上還有如下配置
  5. #binlog-do-db=mstest //要同步的mstest數據庫,要同步多個數據庫,就多加幾個replicate-db-db=數據庫名 #binlog-ignore-db=mysql //要忽略的數據庫
提示1:如果你不配置server-id或者配置值爲0,那麼主服務器將拒絕所有從服務器的連接。
提示2:在使用InnoDB的事務複製,爲了儘可能持久和數據一致,你應該在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:確保主服務器裏的skip-networking選項未啓用,如果網絡被禁用,你的從服務器將不能與主服務器通信並且複製失敗。

注意:
實際操作發現 /etc/my.cnf文件和教材說的不一樣,可能我裝的是MariaDB,如下:

目測文件被放到了 /etc/my.cnf.d 目錄裏,如下:

在 /etc/my.cnf.d/server.cnf 增加相關配置,如下:

 重啓MySQL,如圖:

 查看主服務器狀態,mysql> show master status;, 如圖:

 (注意:記錄好File和Position,後面要用)


4、配置從數據庫

1)從服務器,同理,要分配一個唯一的Server ID,需要關閉MySQL,修改好後再重啓,如下:
  1. [mysqld]
  2. server-id=2
  3. #可以指定要複製的庫
  4. replicate-do-db = test #在master端不指定binlog-do-db,在slave端用replication-do-db來過濾
  5. replicate-ignore-db = mysql #忽略的庫
  6. #網上還有下面配置
  7. #relay-log=mysqld-relay-bin
提示1:如果有多個從服務器,每個服務器的server-id不能重複,跟IP一樣是唯一標識,如果你沒設置server-id或者設置爲0,則從服務器不會連接到主服務器。
提示2:一般你不需要在從服務器上啓用二進制日誌,如果你在從服務器上啓用二進制日誌,那你可用它來做數據備份和崩潰恢復,或者做更復雜的事情(比如這個從服務器用來當作其它從服務器的主服務器)。

2)配置連接主服務器的信息
  1. mysql> stop slave;
  2. mysql> CHANGE MASTER TO
  3. -> MASTER_HOST='192.168.1.233',
  4. -> MASTER_USER='repl',
  5. -> MASTER_PASSWORD='repl123',
  6. -> MASTER_LOG_FILE='mysql-bin.000002',
  7. -> MASTER_LOG_POS=313;
  8. mysql> start slave;

3)查看從服務器狀態
  1. mysql> show slave status \G;



5、測試數據同步

測試,連接主服務器 192.168.1.233,添加了表 stu_user,
然後再連接上 192.168.1.234,發現也自己同步創建了表 stu_user,如圖:


然後在主數據庫添加一條記錄,從數據庫也自動添加了記錄,如圖:

 
至此,主從的配置已經完成了, 目前是在從庫裏面配置複製“test”這個庫,
如果要添加其它庫,可以在主服務器中添加“binlog-do-db”配置,或者在從服務器中添加“replicate-do-db”配置。



四、讀寫分離實現

主從配置是讀寫分離的前提,現在前提已經配置好了,讀寫分離就看具體項目的實現,
讀寫分離,就是“寫”的操作都在主數據庫,“讀”的操作都在從數據庫!

這裏我選用一個比較輕量的框架SpeedPHP來做讀寫分離演示,
這個框架做讀寫分離非常簡單,按要求在配置文件填好信息即可,如圖:

簡單寫了些增加/刪除/查詢的方法,如圖:
 

 
頁面效果如下圖:
 
再來看看兩個數據庫,信息一致,如圖: 

 
這個例子中,
讀取賬號列表的是從 192.168.1.234 (從數據庫)上面的數據庫操作的,
添加和刪除賬號是從 192.168.1.233 (主數據庫)上面的數據庫操作的,
實現了讀寫分離!


(完)




參考:
mysql主從配置(清晰的思路):http://www.cnblogs.com/sustudy/p/4174189.html 
MySQL5.6 數據庫主從(Master/Slave)同步安裝與配置詳解:http://blog.csdn.net/xlgen157387/article/details/51331244 

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