天天看點

阿裡雲Centos7.6配置Mysql主從資料庫(master/slave)實作讀寫分離

作者:劉悅技術分享

在之前的一篇文章中,闡述了如何在高并發高負載的場景下使用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檔案中的日志,并解析成具體操作,來實作主從的操作一緻,而最終資料一緻。

阿裡雲Centos7.6配置Mysql主從資料庫(master/slave)實作讀寫分離

首先準備兩台阿裡雲伺服器,一台作為主機(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;           
阿裡雲Centos7.6配置Mysql主從資料庫(master/slave)實作讀寫分離

把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是否可以同步資料了

阿裡雲Centos7.6配置Mysql主從資料庫(master/slave)實作讀寫分離

當然了,mysql的讀寫分離主從配置并不是萬能的,根據不同的應用場景選擇不同的政策,MySQL的主從複制功能有一定的延遲性,如果對資料實時一緻性的要求比較高的場景不推薦使用。

繼續閱讀