在阿里雲Centos7.6上面配置Mysql主從數據庫(master/slave),實現讀寫分離

    在以前的一篇文章中,闡述瞭如何在高併發高負載的場景下使用nginx作後臺服務的負載均衡:在阿里雲Centos上配置nginx+uwsgi+負載均衡配置,可是不要覺得這樣作了就是一勞永逸的,到了數據業務層、數據訪問層,若是仍是傳統的數據結構,或者只是單單靠一臺服務器負載,如此多的數據庫鏈接操做,數據庫必然會崩潰,數據庫若是宕機的話,後果更是不堪設想。這時候,咱們會考慮如何減小數據庫的鏈接,一方面採用優秀的代碼框架,進行代碼的優化,採用優秀的數據緩存技術如:redis,若是資金豐厚的話,必然會想到架設mysql服務集羣,來分擔主數據庫的壓力。今天總結一下利用MySQL主從配置,實現讀寫分離,減輕數據庫壓力。mysql

    明確目的,部署mysql集羣,採用一主一從的策略,寫入操做使用主庫,從庫實時同步主庫的數據,從庫負責讀取的業務,從而完成讀寫分離的目的。nginx

    mysql主從同步的原理很簡單,從庫生成兩個線程,一個I/O線程,一個SQL線程;i/o線程去請求主庫 的binlog(二進制日誌),並將獲得的binlog日誌寫到relay log(中繼日誌) 文件中;主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog;redis

    SQL 線程,會讀取relay log文件中的日誌,並解析成具體操做,來實現主從的操做一致,而最終數據一致。sql

 

   首先準備兩臺阿里雲服務器,一臺做爲主機(master),一臺做爲從機(slave),都安裝好mysql5.7,具體怎樣安裝mysql服務請移步:https://v3u.cn/a_id_72數據庫

    進入master服務器vim

    修改mysql配置文件 vim /etc/my.cnf,加入以下配置緩存

 

server-id=1
innodb_flush_log_at_trx_commit=2
sync_binlog=1
log-bin=mysql-bin-1

配置說明:安全

#設置主服務 的ID (id能夠本身隨便設置可是要保證和slave的id不同)
server-id=1

#設爲1固然是最安全的,但性能也是最差的(相對其餘兩個參數而言,但不是不能接受)。若是對數據一致性和完整性要求不高,徹底能夠設爲2,若是隻最求性能,例如高併發寫的日誌服務器,設爲0來得到更高性能
innodb_flush_log_at_trx_commit=2

#開啓binlog 志同步功能
sync_binlog=1 

#binlog 日誌文件名
log-bin=mysql-bin-200 

# 這個表示只同步某個庫 (若是沒有此項,表示同步全部的庫)
binlog-do-db=xxxx 服務器

保存後,重啓mysql數據結構

 

systemctl restart mysqld

進入mysql命令行 mysql -uroot -p你的密碼

輸入受權命令

 

GRANT REPLICATION SLAVE ON *.* to 'repl'@'%' identified by 'Admin123!'; 

意思是全部slave均可以經過帳號repl和密碼Admin123!來同步master的數據

而後查看master的狀態:

 

show master status;

  

把file列和Position列記錄下來,一會配置slave要用到

 

此時Master的配置已經搞定,登陸一下從機(slave)

同理修改slave服務器的mysql配置 vim /etc/my.cnf 加入下面的配置,須要注意的是server-id不要和master同樣

 

server-id=201 
innodb_flush_log_at_trx_commit=2 
sync_binlog=1 
log-bin=mysql-bin-201

保存後重啓服務 systemctl restart mysqld

 

進入mysql命令行 mysql -uroot -p你的密碼

輸入命令:

change master to master_host='39.106.228.179',master_user='repl' ,master_password='Admin123!', master_log_file='mysql-bin.000002' ,master_log_pos=154

 

命令說明:

master_host: 主機的ip

master_user : 主機受權的用戶.

master_password : 主機受權時候填寫的密碼

master_log_file : 主機show master status;中的File

master_log_pos: 主機show master status;中的Position.

輸入命令啓動slave

start slave;

能夠查看slave的狀態:

show slave status G;

 

 而後咱們就能夠測試一下對master進行寫入,看看salve是否能夠同步數據了

固然了,mysql的讀寫分離主從配置並非萬能的,根據不一樣的應用場景選擇不一樣的策略,MySQL的主從複製功能有必定的延遲性,若是對數據實時一致性的要求比較高的場景不推薦使用。

相關文章
相關標籤/搜索