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

原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_85

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

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

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

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

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

進入master服務器

修改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的主從複製功能有一定的延遲性,如果對數據實時一致性的要求比較高的場景不推薦使用。

原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_85

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