直播賣貨系統,如何實現mysql資料庫的讀寫分離
前言
大型直播賣貨系統為了軟解大量的併發訪問,除了實現直播賣貨系統分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器來處理如此多的資料庫連線操作,直播賣貨系統資料庫必然會崩潰,特別是資料丟失的話,後果更是不堪設想。這時候,我們會考慮如何減少資料庫的連線,下面就進入我們今天的主題。
利用主從資料庫來實現讀寫分離,從而分擔主資料庫的壓力。在多個直播賣貨系統伺服器上部署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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 帶貨直播系統,透過主從同步實現讀寫分離主從同步
- Spring Aop實現資料庫讀寫分離Spring資料庫
- MySQL-SpringBoot整合JPA實現資料讀寫分離MySqlSpring Boot
- ProxySQL實現MySQL讀寫分離MySql
- 資料庫讀寫分離資料庫
- 資料庫讀寫分離,主從同步實現方法資料庫主從同步
- Kubernetes 中實現 MySQL 的讀寫分離MySql
- ShardingSphere + Mysql,實現分庫分表、讀寫分離,並整合 SpringBootMySqlSpring Boot
- 直播帶貨系統原始碼,實現MYSQL資料庫的主從同步原始碼MySql資料庫主從同步
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- ShardingSphere(七) 讀寫分離配置,實現分庫讀寫操作
- CentOS7系統下使用Mycat實現mysql讀寫分離部署CentOSMySql
- (7)資料庫讀寫分離,主從同步實現方法(資料庫設定)資料庫主從同步
- docker+atlas+mysql實現讀寫分離DockerMySql
- 資料庫中介軟體sharding-jdbc實現讀寫分離資料庫JDBC
- 直播賣貨系統,使用資料庫查詢快取資料庫快取
- Docker實現Mariadb分庫分表、讀寫分離Docker
- Mycat實現mysql的負載均衡讀寫分離MySql負載
- MySQL 中讀寫分離資料延遲MySql
- mysql讀寫分離的最佳實踐MySql
- ProxySQL實現Mysql讀寫分離 - 部署手冊MySql
- 搭建MySQL主從實現Django讀寫分離MySqlDjango
- 資料庫讀寫分離Master-Slave資料庫AST
- 位元組面試:什麼是讀寫分離?讀寫分離的底層如何實現?面試
- springboot多資料來源配合docker部署mysql主從實現讀寫分離Spring BootDockerMySql
- 資料庫治理利器:動態讀寫分離資料庫
- 【Mongo】Mongo讀寫分離的實現Go
- MySQL怎麼實現主從同步和Django實現MySQL讀寫分離MySql主從同步Django
- 乾貨滿滿 | 微服務化的資料庫設計與讀寫分離微服務資料庫
- 瞭解直播帶貨系統使用的MySQL資料庫基礎MySql資料庫
- 資料庫的讀寫分離與負載均衡策略資料庫負載
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer
- golang saas框架,資料庫級別隔離、讀寫分離Golang框架資料庫
- 分庫分表(6)--- SpringBoot+ShardingSphere實現分表+ 讀寫分離Spring Boot
- Mycat中介軟體實現Mysql主從讀寫分離MySql
- 資料讀寫壓力大,讀寫分離
- 探究MySQL MGR的讀寫分離MySql
- MySQL 讀寫分離的好處MySql