直播賣貨系統,如何實現mysql資料庫的讀寫分離

雲豹科技曉彤發表於2021-07-02

前言

大型直播賣貨系統為了軟解大量的併發訪問,除了實現直播賣貨系統分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器來處理如此多的資料庫連線操作,直播賣貨系統資料庫必然會崩潰,特別是資料丟失的話,後果更是不堪設想。這時候,我們會考慮如何減少資料庫的連線,下面就進入我們今天的主題。

利用主從資料庫來實現讀寫分離,從而分擔主資料庫的壓力。在多個直播賣貨系統伺服器上部署mysql ,將其中一臺認為主資料庫,而其他為從資料庫,實現主從同步。其中主資料庫負責主動寫的操作,而從資料庫則只負責主動讀的操作( slave 從資料庫仍然會被動的進行寫操作,為了保持資料一致性),這樣就可以很大程度上的避免資料丟失的問題,同時也可減少使用者對直播賣貨系統資料庫的連線,減輕主資料庫的負載。

下面讓我們來看下一個圖:

在上面的模型中,Mysql-A就是主伺服器,即master,Mysql-B就是從伺服器,即slave。

Mysql-A的資料庫事件(例如修改資料庫的sql操作語句),都會儲存到日誌系統A中,在相應的埠(預設3306)透過網路傳送給Mysql-B。Mysql-B收到後,寫入本地日誌系統B,然後一條條的將資料庫事件在資料庫Mysql-B中完成。

日誌系統A,是MYSQL的日誌型別中的二進位制日誌,也就是專門用來儲存修改資料庫表的所有動作,即bin log,注意MYSQL會在執行語句之後,釋放鎖之前,寫入二進位制日誌,確保事務安全。

日誌系統B,不是二進位制日誌,由於它是從MYSQL-A的二進位制日誌複製過來的,並不是自己的資料庫變化產生的,有點接力的感覺,稱為中繼日誌,即relay log。

透過上面的機制,可以保證Mysql-A和Mysql-B的資料庫資料一致,但是時間上肯定有延遲,即Mysql-B的資料是滯後的。因此,會出現這樣的問題,Mysql-A的資料庫操作是可以併發的執行的,但是Mysql-B只能從relay log中一條一條的讀取執行。若Mysql-A的寫操作很頻繁,Mysql-B很可能就跟不上了。

主從同步複製有以下幾種方式:

1 )同步複製, master 的變化,必須等待 slave-1,slave-2,...,slave-n 完成後才能返回。

2 )非同步複製, master 只需要完成自己的資料庫操作即可,至於 slaves 是否收到二進位制日誌,是否完成操作,不用關心。 MYSQL 的預設設定。

3 )半同步複製, master 只保證 slaves 中的一個操作成功,就返回,其他 slave 不管。這個功能,是由 google MYSQL 引入的。

本文說的是在centos 7 系統上,實現的 mysql5.7 資料庫的主從同步配置,從而實現讀寫分離操作。

1 分別在兩臺centos 7系統上安裝mysql 5.7

具體的安裝步驟可以見此連結,https://blog.csdn.net/qq_15092079/article/details/81629238

本文中的兩臺伺服器的IP 地址分別為主伺服器( 192.168.17.130 )和從伺服器( 192.168.17.132 )。

分別在這兩個伺服器上建立test 資料庫,以備後面測試。

2 master主伺服器的配置

2.1 配置檔案my.cnf的修改

# 根據上一篇文章,編輯 my.cnf 檔案

[root@localhost mysql]# vim /etc/my.cnf

 

# [mysqld] 中新增:

server-id=1

log_bin=master-bin

log_bin_index=master-bin.index

binlog_do_db=test

# 備註:

#server-id 伺服器唯一標識。

#log_bin 啟動 MySQL 二進位制日誌,即資料同步語句,從資料庫會一條一條的執行這些語句。

#binlog_do_db 指定記錄二進位制日誌的資料庫,即需要複製的資料庫名,如果複製多個資料庫,重複設定這個選項即可。

#binlog_ignore_db 指定不記錄二進位制日誌的資料庫,即不需要複製的資料庫名,如果有多個資料庫,重複設定這個選項即可。

# 其中需要注意的是, binlog_do_db binlog_ignore_db 為互斥選項,一般只需要一個即可。

 

2.2 建立從伺服器的直播賣貨系統使用者和許可權

# 進入 mysql 資料庫

[root@localhost mysql]# mysql -uroot -p

Enter password:

 

# 建立從資料庫的 masterbackup 使用者和許可權

mysql> grant replication slave on *.* to masterbackup@'192.168.17.%' identified by '123456';

# 備註

#192.168.17.% 萬用字元,表示 0-255 IP 都可訪問主伺服器,正式環境請配置指定從伺服器 IP

# 若將 192.168.17.% 改為 % ,則任何 ip 均可作為其從資料庫來訪問主伺服器

 

# 退出 mysql

mysql> exit;

 

2.3 重啟mysql服務

[root@localhost mysql]# service mysql restart

Shutting down MySQL.... SUCCESS!

Starting MySQL. SUCCESS!

 

2.4 檢視主伺服器狀態

# 進入 mysql 資料庫

[root@localhost mysql]# mysql -uroot -p

Enter password:

 

# 檢視主伺服器狀態

mysql> show master status;

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |      154 | test         |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

 

————————————————
宣告:本文由雲豹科技轉發自CSDN 葉夢_ 】,如有侵權請聯絡作者刪除
原文連結:https://blog.csdn.net/qq_15092079/article/details/81672920

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70002045/viewspace-2779478/,如需轉載,請註明出處,否則將追究法律責任。

相關文章