国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL 主從,六分鐘帶你掌握!

數(shù)據(jù)庫 MySQL
對(duì)于數(shù)據(jù)庫單機(jī)部署,在 4 核 8G 的機(jī)器上運(yùn)行 MySQL 5.7 時(shí),大概可以支撐 500 的 TPS 和 10000 的 QPS,當(dāng)遇到一些活動(dòng)時(shí),查詢流量驟然,就需要進(jìn)行主從分離。

大家好,我是樓仔!

MySQL 主從一直是面試常客,里面的知識(shí)點(diǎn)雖然基礎(chǔ),但是能回答全的同學(xué)不多。

比如我之前面試小米,就被問到過主從復(fù)制的原理,以及主從延遲的解決方案,你之前面試,有遇到過哪些 MySQL 主從的問題呢?

1. MySQL 主從

1.1 什么是 MySQL 主從 ?

所謂 MySQL 主從,就是建立兩個(gè)完全一樣的數(shù)據(jù)庫,一個(gè)是主庫,一個(gè)是從庫,主庫對(duì)外提供讀寫的操作,從庫對(duì)外提供讀的操作。

圖片

1.2 為什么使用 MySQL 主從 ?

對(duì)于數(shù)據(jù)庫單機(jī)部署,在 4 核 8G 的機(jī)器上運(yùn)行 MySQL 5.7 時(shí),大概可以支撐 500 的 TPS 和
10000 的 QPS,當(dāng)遇到一些活動(dòng)時(shí),查詢流量驟然,就需要進(jìn)行主從分離。

大部分系統(tǒng)的訪問模型是讀多寫少,讀寫請(qǐng)求量的差距可能達(dá)到幾個(gè)數(shù)量級(jí),所以我們可以通過一主多從的方式,主庫只負(fù)責(zé)寫入和部分核心邏輯的查詢,多個(gè)從庫只負(fù)責(zé)查詢,提升查詢性能,降低主庫壓力。

當(dāng)主庫宕機(jī)時(shí),從庫可以切成主庫,保證服務(wù)的高可用,然后主庫也可以做數(shù)據(jù)的容災(zāi)備份,整體場景總結(jié)如下:

  • 讀寫分離:從庫提供查詢,減少主庫壓力,提升性能;
  • 高可用:故障時(shí)可切換從庫,保證服務(wù)高可用;
  • 數(shù)據(jù)備份:數(shù)據(jù)備份到從庫,防止服務(wù)器宕機(jī)導(dǎo)致數(shù)據(jù)丟失。

2. 主從復(fù)制

2.1 主從復(fù)制原理

MySQL 的主從復(fù)制是依賴于 binlog,也就是記錄 MySQL 上的所有變化并以二進(jìn)制形式保存在磁盤上二進(jìn)制日志文件。

主從復(fù)制就是將 binlog 中的數(shù)據(jù)從主庫傳輸?shù)綇膸焐希话氵@個(gè)過程是異步的,即主庫上的操作不會(huì)等待 binlog 同步地完成。

圖片

詳細(xì)流程如下:

  • 主庫寫 binlog:主庫的更新 SQL(update、insert、delete) 被寫到 binlog;
  • 主庫發(fā)送 binlog:主庫創(chuàng)建一個(gè) log dump 線程來發(fā)送 binlog 給從庫;
  • 從庫寫 relay log:從庫在連接到主節(jié)點(diǎn)時(shí)會(huì)創(chuàng)建一個(gè) IO 線程,以請(qǐng)求主庫更新的 binlog,并且把接收到的 binlog 信息寫入一個(gè)叫做
    relay log 的日志文件;
  • 從庫回放:從庫還會(huì)創(chuàng)建一個(gè) SQL 線程讀取 relay log 中的內(nèi)容,并且在從庫中做回放,最終實(shí)現(xiàn)主從的一致性。

2.2 如何保證主從一致

當(dāng)主庫和從庫數(shù)據(jù)同步時(shí),突然中斷怎么辦?因?yàn)橹鲙炫c從庫之間維持了一個(gè)長鏈接,主庫內(nèi)部有一個(gè)線程,專門服務(wù)于從庫的這個(gè)長鏈接。

對(duì)于下面的情況,假如主庫執(zhí)行如下 SQL,其中 a 和 create_time 都是索引:

delete from t where a > '666' and create_time<'2022-03-01' limit 1;

我們知道,數(shù)據(jù)選擇了 a 索引和選擇 create_time 索引,最后 limit 1 出來的數(shù)據(jù)一般是不一樣的。

所以就會(huì)存在這種情況:在 binlog = statement 格式時(shí),主庫在執(zhí)行這條 SQL 時(shí),使用的是索引 a,而從庫在執(zhí)行這條 SQL
時(shí),使用了索引 create_time,最后主從數(shù)據(jù)不一致了。

那么我們?cè)撊绾谓鉀Q呢?

可以把 binlog 格式修改為 row,row 格式的 binlog 日志記錄的不是 SQL 原文,而是兩個(gè) event:Table_map 和
Delete_rows。

Table_map event 說明要操作的表,Delete_rows event用于定義要?jiǎng)h除的行為,記錄刪除的具體行數(shù)。row 格式的 binlog
記錄的就是要?jiǎng)h除的主鍵 ID 信息,因此不會(huì)出現(xiàn)主從不一致的問題。

但是如果 SQL 刪除 10 萬行數(shù)據(jù),使用 row 格式就會(huì)很占空間,10 萬條數(shù)據(jù)都在 binlog 里面,寫 binlog 的時(shí)候也很耗 IO。但是
statement 格式的 binlog 可能會(huì)導(dǎo)致數(shù)據(jù)不一致。

設(shè)計(jì) MySQL 的大叔想了一個(gè)折中的方案,mixed 格式的 binlog,其實(shí)就是 row 和 statement 格式混合使用,當(dāng) MySQL
判斷可能數(shù)據(jù)不一致時(shí),就用 row 格式,否則使用就用 statement 格式。

3. 主從延遲

有時(shí)候我們遇到從數(shù)據(jù)庫中獲取不到信息的詭異問題時(shí),會(huì)糾結(jié)于代碼中是否有一些邏輯會(huì)把之前寫入的內(nèi)容刪除,但是你又會(huì)發(fā)現(xiàn),過了一段時(shí)間再去查詢時(shí)又可以讀到數(shù)據(jù)了,這基本上就是主從延遲在作怪。

主從延遲,其實(shí)就是“從庫回放” 完成的時(shí)間,與 “主庫寫 binlog” 完成時(shí)間的差值,會(huì)導(dǎo)致從庫查詢的數(shù)據(jù),和主庫的不一致。

3.1 主從延遲原理

談到 MySQL 數(shù)據(jù)庫主從同步延遲原理,得從 MySQL 的主從復(fù)制原理說起:

  • MySQL 的主從復(fù)制都是單線程的操作,主庫對(duì)所有 DDL 和 DML 產(chǎn)生 binlog,binlog 是順序?qū)懀孕屎芨?
  • Slave 的 Slave_IO_Running 線程會(huì)到主庫取日志,放入 relay log,效率會(huì)比較高;
  • Slave 的 Slave_SQL_Running 線程將主庫的 DDL 和 DML 操作都在 Slave 實(shí)施,DML 和 DDL 的 IO 操作是隨機(jī)的,不是順序的,因此成本會(huì)很高,還可能是 Slave 上的其他查詢產(chǎn)生 lock 爭用,由于 Slave_SQL_Running 也是單線程的,所以一個(gè) DDL 卡主了,需要執(zhí)行 10 分鐘,那么所有之后的 DDL 會(huì)等待這個(gè) DDL 執(zhí)行完才會(huì)繼續(xù)執(zhí)行,這就導(dǎo)致了延時(shí)。

總結(jié)一下主從延遲的主要原因:主從延遲主要是出現(xiàn)在 “relay log 回放” 這一步,當(dāng)主庫的 TPS 并發(fā)較高,產(chǎn)生的 DDL 數(shù)量超過從庫一個(gè)
SQL 線程所能承受的范圍,那么延時(shí)就產(chǎn)生了,當(dāng)然還有就是可能與從庫的大型 query 語句產(chǎn)生了鎖等待。

3.2 主從延遲情況

  • 從庫機(jī)器性能:從庫機(jī)器比主庫的機(jī)器性能差,只需選擇主從庫一樣規(guī)格的機(jī)器就好。
  • 從庫壓力大:可以搞了一主多從的架構(gòu),還可以把 binlog 接入到 Hadoop 這類系統(tǒng),讓它們提供查詢的能力。
  • 從庫過多:要避免復(fù)制的從節(jié)點(diǎn)數(shù)量過多,從庫數(shù)據(jù)一般以3-5個(gè)為宜。
  • 大事務(wù):如果一個(gè)事務(wù)執(zhí)行就要 10 分鐘,那么主庫執(zhí)行完后,給到從庫執(zhí)行,最后這個(gè)事務(wù)可能就會(huì)導(dǎo)致從庫延遲 10 分鐘啦。日常開發(fā)中,不要一次性
    delete 太多 SQL,需要分批進(jìn)行,另外大表的 DDL 語句,也會(huì)導(dǎo)致大事務(wù)。
  • 網(wǎng)絡(luò)延遲:優(yōu)化網(wǎng)絡(luò),比如帶寬 20M 升級(jí)到 100M。
  • MySQL 版本低:低版本的 MySQL 只支持單線程復(fù)制,如果主庫并發(fā)高,來不及傳送到從庫,就會(huì)導(dǎo)致延遲,可以換用更高版本的
    MySQL,支持多線程復(fù)制。

3.3 主從延遲解決方案

我們一般會(huì)把從庫落后的時(shí)間作為一個(gè)重點(diǎn)的數(shù)據(jù)庫指標(biāo)做監(jiān)控和報(bào)警,正常的時(shí)間是在毫秒級(jí)別,一旦落后的時(shí)間達(dá)到了秒級(jí)別就需要告警了。

解決該問題的方法,除了縮短主從延遲的時(shí)間,還有一些其它的方法,基本原理都是盡量不查詢從庫,具體解決方案如下:

  • 使用緩存:我們?cè)谕綄憯?shù)據(jù)庫的同時(shí),也把數(shù)據(jù)寫到緩存,查詢數(shù)據(jù)時(shí),會(huì)先查詢緩存,不過這種情況會(huì)帶來 MySQL 和 Redis 數(shù)據(jù)一致性問題。
  • 查詢主庫:直接查詢主庫,這種情況會(huì)給主庫太大壓力,不建議這種方式。
  • 數(shù)據(jù)冗余:對(duì)于一些異步處理的場景,如果只扔數(shù)據(jù) ID,消費(fèi)數(shù)據(jù)時(shí),需要查詢從庫,我們可以把數(shù)據(jù)全部都扔給消息隊(duì)列,這樣消費(fèi)者就無需再查詢從庫。(這種情況應(yīng)該不太能出現(xiàn),數(shù)據(jù)轉(zhuǎn)了一圈,MySQL 主從還沒有同步好,直接去撕 DBA 吧)

在實(shí)際應(yīng)用場景中,對(duì)于一些非常核心的場景,比如庫存,支付訂單等,需要直接查詢從庫,其它非核心場景,就不要去查主庫了。

4. 主從切換

4.1 一主一從

兩臺(tái)機(jī)器 A 和 B,A 為主庫,負(fù)責(zé)讀寫,B 為從庫,負(fù)責(zé)讀數(shù)據(jù)。

如果 A 庫發(fā)生故障,B 庫成為主庫負(fù)責(zé)讀寫,修復(fù)故障后,A 成為從庫,主庫 B 同步數(shù)據(jù)到從庫 A。

圖片

優(yōu)點(diǎn):從庫支持讀,分擔(dān)了主庫的壓力,提升了并發(fā)度,且一個(gè)機(jī)器故障了可以自動(dòng)切換,操作比較簡單,公司從庫還可以充當(dāng)數(shù)據(jù)備份的角色;

缺點(diǎn):一臺(tái)從庫,并發(fā)支持還是不夠,并且一共兩臺(tái)機(jī)器,還是存在同時(shí)故障的機(jī)率,不夠高可用。

對(duì)于一主一從的模式,一般小公司會(huì)這么用,不過該模式下,主從分離的意義其實(shí)并不大,因?yàn)樾」镜牧髁坎桓撸嗍菫榱藬?shù)據(jù)庫的可用性,以及數(shù)據(jù)備份。

4.2 一主多從一臺(tái)主庫多臺(tái)從庫,A 為主庫,負(fù)責(zé)讀寫,B、C、D為從庫,負(fù)責(zé)讀數(shù)據(jù)。

如果 A 庫發(fā)生故障,B 庫成為主庫負(fù)責(zé)讀寫,C、D 負(fù)責(zé)讀,修復(fù)故障后,A 也成為從庫,主庫 B 同步數(shù)據(jù)到從庫 A。

圖片

  • 優(yōu)點(diǎn):多個(gè)從庫支持讀,分擔(dān)了主庫的壓力,明顯提升了讀的并發(fā)度。
  • 缺點(diǎn):只有臺(tái)主機(jī)寫,因此寫的并發(fā)度不高。

基本上大公司,比如百度、滴滴,都是這種一主多從的模式,因?yàn)椴樵兞髁刻撸欢ㄐ枰M(jìn)行讀寫分離,同時(shí)也需要支持服務(wù)的高可用、數(shù)據(jù)容災(zāi)。

責(zé)任編輯:武曉燕 來源: 樓仔
相關(guān)推薦

2022-07-04 08:01:16

OSPFRIPBGP

2009-11-10 17:27:01

Oracle全表掃描

2009-10-27 17:22:27

2025-01-24 08:38:47

2024-04-18 08:19:22

數(shù)據(jù)庫運(yùn)維工具

2021-01-13 09:23:23

優(yōu)先隊(duì)列React二叉堆

2017-01-10 09:07:53

tcpdumpGET請(qǐng)求

2024-10-25 15:56:20

2025-03-13 06:22:59

2022-06-17 08:05:28

Grafana監(jiān)控儀表盤系統(tǒng)

2015-09-21 10:16:37

阿里云心電數(shù)據(jù)大數(shù)據(jù)

2021-06-07 09:51:22

原型模式序列化

2021-10-19 07:27:08

HTTP代理網(wǎng)絡(luò)

2009-11-17 14:50:50

Oracle調(diào)優(yōu)

2020-10-13 18:22:58

DevOps工具開發(fā)

2020-09-14 11:30:26

HTTP3運(yùn)維互聯(lián)網(wǎng)

2021-06-18 07:34:12

Kafka中間件微服務(wù)

2019-12-23 16:42:44

JavaScript前端開發(fā)

2019-05-08 14:02:52

MySQL索引查詢優(yōu)化數(shù)據(jù)庫

2021-01-29 11:25:57

Python爬山算法函數(shù)優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产日韩精品视频一区| 欧美激情中文字幕| 日韩在线小视频| 天堂av免费观看| 国产精品资源网站| 欧洲久久久久久| 韩日欧美一区| 国产美女久久精品| 国产一精品一av一免费爽爽| 精品视频久久久久久| 午夜视频在线观看网站| 亚洲精品久久久久久国产精华液| www精品久久| 免费人成黄页网站在线一区二区| 粉嫩精品一区二区三区在线观看 | 欧美日韩精品一二三区| 日本高清中文字幕| 中文字幕一区二区三区在线观看| 久久精品.com| 91色|porny| 精品人妻一区二区三区四区在线 | 黄视频免费在线看| 日韩免费高清视频| 国产在线高清视频| 欧美丰满少妇xxxbbb| 香蕉视频免费在线播放| 欧美中文字幕不卡| 色视频在线免费观看| 欧美日韩视频在线第一区| 伊人久久久大香线蕉综合直播| 欧美在线播放高清精品| 亚洲午夜精品福利| 日韩黄色影院| 欧美在线观看视频一区| 免费午夜视频在线观看| 久久最新视频| 图片区小说区区亚洲五月| 首页国产欧美日韩丝袜| 亚洲成人自拍视频| 国产精品主播直播| 青青视频在线播放| 国产精品电影院| 在线成人动漫| 欧美日韩精品一区视频| 欧洲中文在线| 日韩中文字幕亚洲| 国产伦理久久久久久妇女| 琪琪亚洲精品午夜在线| 雨宫琴音一区二区三区| 日本免费高清一区| 国产成人av电影在线观看| 欧美国产日韩在线播放| 亚洲一区二区视频在线观看| 国产成人免费av在线| 亚洲欧美国产视频| 成人直播视频| 欧美日韩成人在线视频| 少妇精品久久久| 91精品国产99久久久久久红楼 | 日韩精品电影网| 91麻豆精品国产综合久久久| 日韩av色在线| 久久xxxx| 免费观看成人在线视频| 天天影视涩香欲综合网| 在线黄色网页| 日韩色av导航| 精品国产乱码久久久久久果冻传媒| 97人人模人人爽人人喊38tv| 国产一区在线看| 3d黄动漫网站| 日韩美女主播在线视频一区二区三区| 福利一区视频| 亚洲综合在线中文字幕| 国产精品99久久久久| 波多野吉衣av| 亚洲国产精彩中文乱码av在线播放 | 很黄很黄激情成人| wwwwww欧美| 一区二区三区蜜桃网| 丁香花在线观看完整版电影| 欧美大片在线看免费观看| 欧美三级第一页| 免费超爽大片黄| 色老头久久综合| 亚洲男人在线| 久久精品中文字幕一区二区三区| 91亚洲国产成人精品一区二三| 国产区视频在线| 美日韩精品免费观看视频| 亚洲成人99| 女人扒开屁股爽桶30分钟| 在线精品视频免费播放| 婷婷激情成人| 国产一区二区三区奇米久涩 | 日韩区国产区| 亚洲免费视频中文字幕| 欧美久久天堂| 亚洲精品欧美一区二区三区| av亚洲产国偷v产偷v自拍| 97超碰国产一区二区三区| 久久在线免费观看视频| 久久久久久亚洲精品杨幂换脸| 成人在色线视频在线观看免费大全| 欧美一区二区在线观看| 女同另类激情重口| 精品国产一区二区三区无码| 正在播放一区二区| 91精品国产乱码久久久久久久| 亚洲一级片免费| 在线免费看av不卡| 日韩精彩视频在线观看| 青青视频在线观| 欧美一级淫片videoshd| 成人av第一页| 激情图片在线观看高清国产| 成人福利视频在线观看| 国产精品久久久久国产精品日日 | 欧美日韩国产片| 成人久久久久| 性刺激的欧美三级视频| 在线成人一区二区| 国产一区二区三区不卡在线观看 | 国产91色在线|亚洲| 有码一区二区三区| 欧美h版在线观看| 91免费版看片| 亚洲国产精彩中文乱码av| 亚洲精品男同| 阿v免费在线观看| 成人中文字幕在线观看| 亚洲欧美另类图片小说| 日韩视频一二区| 久久黄色片视频| 中文字幕亚洲欧美日韩高清| 精品一区中文字幕| 国产高清中文字幕在线| 亚洲精品一区二区三区蜜桃久| 日韩精品一区在线观看| 香蕉视频成人在线观看| 性xxxxfjsxxxxx欧美| 欧美日韩在线不卡一区| 777午夜精品免费视频| 狠狠爱成人网| 18av在线播放| 400部精品国偷自产在线观看 | 91国内在线| 视频一区不卡| 亚洲天堂av综合网| 久久综合九色欧美综合狠狠| 国产精品原创视频| 别急慢慢来1978如如2| 97免费在线视频| 午夜在线电影亚洲一区| 狠色狠色综合久久| 在线播放免费av| 激情成人开心网| 色综合久久悠悠| 亚洲韩国精品一区| 亚洲黑丝一区二区| 欧美a级在线观看| 波多野结衣天堂| 91久久精品美女高潮| 欧美mv日韩mv国产网站| 成人精品小蝌蚪| 影视先锋久久| 国产69精品久久久久久久| 深夜精品寂寞黄网站在线观看| 国产欧美日韩三区| 欧美一区在线观看视频| 性生活免费在线观看| 69av在线播放| 在线播放亚洲一区| 日韩av中文在线观看| 免费日韩电影| 亚洲av综合色区| 久久久亚洲网站| 亚洲国产综合人成综合网站| 久久国产小视频| 欧美人与禽性xxxxx杂性| 加勒比海盗1在线观看免费国语版| 亚洲人永久免费| 国产精品免费人成网站| 亚洲欧洲中文字幕| 一色桃子av在线| 久久久久亚洲av无码专区喷水| 亚洲人成在线观看网站高清| 欧美经典一区二区三区| 青青草成人影院| 美女精品视频| 午夜肉伦伦影院| 欧美精品人人做人人爱视频| 日韩亚洲精品视频| 精品女厕一区二区三区| 首页国产欧美日韩丝袜| 精品一级毛片| 182tv在线播放| 天天爱天天操天天干| 欧美性大战久久久久| 久久人体大胆视频|