成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

阿里二面:聊聊 MySQL 主從同步方案的優(yōu)缺點(diǎn)

數(shù)據(jù)庫(kù) MySQL
MySQL Replication 是 MySQL 官方提供的主從同步方案,用于將 MySQL 主庫(kù)的數(shù)據(jù)同步到從庫(kù)中,從庫(kù)可以供應(yīng)用程序讀取數(shù)據(jù)。

大家好,我是君哥。今天來聊一聊 MySQL 主從架構(gòu)。

MySQL Replication 是 MySQL 官方提供的主從同步方案,用于將 MySQL 主庫(kù)的數(shù)據(jù)同步到從庫(kù)中,從庫(kù)可以供應(yīng)用程序讀取數(shù)據(jù)。

1.簡(jiǎn)介

Replication 是目前 MySQL 使用最多的災(zāi)備方案,主要有 3 個(gè)作用:

  • 讀寫分離,寫主庫(kù)讀從庫(kù)。這樣大大降低主庫(kù)的負(fù)載,即使主庫(kù)出現(xiàn)類似鎖表之類的情況,也不影響應(yīng)用讀取數(shù)據(jù)。
  • 實(shí)現(xiàn)災(zāi)備,當(dāng)主庫(kù)發(fā)生故障時(shí),可以方便地把從庫(kù)切換成主庫(kù),實(shí)現(xiàn)高可用(HA)。
  • 水平擴(kuò)展,當(dāng)應(yīng)用訪問量導(dǎo)致數(shù)據(jù)庫(kù) I/O 高時(shí),可以通過水平擴(kuò)展的方式將降低單機(jī)負(fù)載,降低磁盤 I/O。

下面是一個(gè) MySQL Replication 的案例。

圖片圖片

在上面的例子中,有一個(gè)主庫(kù),三個(gè)從庫(kù),通過 Replication,主庫(kù)生成 events 的 binlog 發(fā)給 slave,Slave 將收到的 binlog 拷貝到 relaylog,然后解析 relaylog 中的命令進(jìn)行執(zhí)行,實(shí)現(xiàn)主從數(shù)據(jù)同步。

2.同步原理

MySQL 通過 binlog 實(shí)現(xiàn)同步過程中,會(huì)用到 3 個(gè)線程:

  • IO thread: 從庫(kù)執(zhí)行 START SLAVE 語(yǔ)句時(shí),會(huì)創(chuàng)建一個(gè) IO thread,負(fù)責(zé)連接主節(jié)點(diǎn),請(qǐng)求更新的 binlog,接收到 binlog 后寫入 relaylog;
  • dump thread:主庫(kù)接收到從庫(kù)的 binlog 請(qǐng)求后,創(chuàng)建一個(gè) dump thread,把 binlog 同步給從庫(kù);
  • sql thread:讀取 relaylog,解析 relaylog 的命令并執(zhí)行,將數(shù)據(jù)落庫(kù)。

整個(gè)同步流程如下:

圖片圖片

  • 在從庫(kù)上執(zhí)行 change master 命令,設(shè)置要連接主庫(kù)的用戶名、密碼、ip、端口以及請(qǐng)求同步的 binlog 中的位置,這個(gè)位置包含文件名和binlog offset;
  • 從庫(kù)執(zhí)行 start slave 命令,這時(shí)會(huì)啟動(dòng)上面的 IO thread 和 sql thread,其中 IO thread 負(fù)責(zé)跟主庫(kù)建立連接;
  • 主庫(kù)收到從庫(kù)的連接請(qǐng)求后,校驗(yàn)用戶名密碼;
  • 主庫(kù)校驗(yàn)通過后創(chuàng)建 dump thread,按照從庫(kù)請(qǐng)求 binlog 的 offset 將 binlog 發(fā)給從庫(kù);
  • 從庫(kù)收到主庫(kù)發(fā)送的 binlog 后,將日志寫入 relaylog;
  • sql thread 讀取 relaylog,解析出命令后執(zhí)行。

3.優(yōu)缺點(diǎn)

前面講到,主從同步有讀寫分離、實(shí)現(xiàn)災(zāi)備、水平擴(kuò)展等優(yōu)點(diǎn)。那主從同步有哪些缺點(diǎn)呢?最大的缺點(diǎn)就是主從延遲

導(dǎo)致主從延遲的主要原因如下:

  • 從庫(kù)所在機(jī)器性能差,命令執(zhí)行慢;
  • 從庫(kù)查詢壓力大,消耗了大量 CPU 資源,影響了 sql thread 執(zhí)行;
  • 主庫(kù)有大事務(wù)(比如大表DDL),這個(gè)事務(wù)里面執(zhí)行的 sql 比較多,一方面主庫(kù)需要等待事務(wù)執(zhí)行完成才能寫入 binlog,另一方面同步到從庫(kù)和在從庫(kù)執(zhí)行都需要花費(fèi)很多時(shí)間,導(dǎo)致主從延遲;
  • 數(shù)據(jù)庫(kù)版本低,在 MySQL 5.6 之前,只支持單線程復(fù)制,效率比較低;
  • 表上無主鍵,主庫(kù)利用索引更改數(shù)據(jù),從庫(kù)只能用全表掃描。

要解決主備延遲的問題,可以考慮下面方法:

  • 優(yōu)化業(yè)務(wù)邏輯,避免使用大事務(wù),或者大事務(wù)場(chǎng)景盡量放在業(yè)務(wù)低峰期執(zhí)行;
  • 提高從庫(kù)所在機(jī)器的性能;
  • 保障網(wǎng)絡(luò)性能,避免網(wǎng)絡(luò)延遲;
  • 引入 semi-sync 半同步復(fù)制,配合異步復(fù)制。

主從同步的第二個(gè)缺點(diǎn)就是數(shù)據(jù)丟失

MySQL 有 3 種主從復(fù)制方式:

  • 異步復(fù)制:主庫(kù)執(zhí)行完客戶端提交的事務(wù)后立即將結(jié)果返回給客戶端,不關(guān)心從庫(kù)是否同步完成。這種方式很容易發(fā)生數(shù)據(jù)丟失,比如主庫(kù)的日志還未同步給從庫(kù)就宕機(jī)了,這時(shí)需要在從庫(kù)中選擇一個(gè)作為新主庫(kù),之前未同步完成的數(shù)據(jù)就丟失了;
  • 全同步復(fù)制:主庫(kù)執(zhí)行完客戶端提交的事務(wù)并且等待從庫(kù)也執(zhí)行完成數(shù)據(jù)同步后再把結(jié)果返回給客戶端。這種方式能夠保證不丟失數(shù)據(jù),但是數(shù)據(jù)庫(kù)的性能會(huì)受到影響;
  • 半同步復(fù)制:是介于全同步和異步復(fù)制的一種方式,主庫(kù)至少等待一個(gè)從庫(kù)接收 binlog 并成功寫入到 relaylog 后給客戶端返回結(jié)果。主庫(kù)不需要等待所有從庫(kù)返回 ACK。

MySQL 中默認(rèn)采用異步復(fù)制,這樣很容易導(dǎo)致數(shù)據(jù)丟失。一個(gè)好的方式就是采用 semi-sync 半同步復(fù)制插件。不過 semi-sync 存在一個(gè)問題,主庫(kù)寫數(shù)據(jù)到 binlog 后執(zhí)行 commit,才會(huì)給從庫(kù)同步數(shù)據(jù)。如果從庫(kù)還沒有返回 ACK,主庫(kù)發(fā)生了宕機(jī),從庫(kù)還沒有寫完 relaylog 就被選擇為主庫(kù),也會(huì)發(fā)生數(shù)據(jù)丟失。

為了解決這個(gè)問題,MySQL 5.7 引入了增強(qiáng)版半同步復(fù)制。主庫(kù)寫入數(shù)據(jù)到 binlog 后,就給從庫(kù)進(jìn)行同步,直到至少一個(gè)從庫(kù)返回給主庫(kù) ACK,主庫(kù)才會(huì)進(jìn)行 commit 操作。

4.總結(jié)

本文介紹了 MySQL 主從同步方案的優(yōu)缺點(diǎn),希望能對(duì)你使用和理解 MySQL 有所幫助。

責(zé)任編輯:武曉燕 來源: 軍哥聊技術(shù)
相關(guān)推薦

2022-04-02 10:23:12

MySQL數(shù)據(jù)庫(kù)

2025-04-01 12:00:00

gRPC分布式系微服務(wù)

2010-11-23 13:57:50

MySQL獨(dú)立表空間

2024-06-27 12:26:32

2022-08-18 08:24:19

Mysql數(shù)據(jù)庫(kù)

2021-04-25 09:58:48

mmapJava面試

2021-03-17 15:54:32

IO零拷貝方式

2025-01-15 15:47:36

2021-10-09 09:52:17

云存儲(chǔ)公共云遷移

2010-05-13 14:37:26

MySQL備份數(shù)據(jù)庫(kù)

2011-04-15 09:05:18

VMware私有云

2017-09-12 08:03:29

數(shù)據(jù)庫(kù)MySQL主庫(kù)

2023-01-09 07:33:47

Redisjava客戶端

2024-03-22 13:31:00

線程策略線程池

2024-08-27 08:29:49

2020-01-09 10:44:47

Hadoop 3缺點(diǎn)優(yōu)點(diǎn)

2009-06-19 18:36:15

JPAHibernate

2018-05-17 11:05:56

2010-06-21 14:14:33

OSPF協(xié)議

2022-07-18 13:36:13

零信任網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 激情福利视频 | 免费麻豆视频 | 日韩在线免费视频 | 欧美做暖暖视频 | 亚洲免费在线视频 | 亚洲综合在线视频 | 正在播放国产精品 | 国产精品久久a | aaa一区| 免费一区二区三区 | 在线中文视频 | 久久久久久亚洲 | 国产精品视频二区三区 | 国产一区在线免费 | 久久精品欧美一区二区三区不卡 | 免费一区二区三区在线视频 | 国产欧美一区二区久久性色99 | 亚洲男人天堂2024 | 综合精品在线 | 99精品亚洲国产精品久久不卡 | 亚洲第一av| 成人在线视频观看 | 91在线一区 | 久久新视频| 欧美日韩一区二区三区视频 | 韩国毛片一区二区三区 | 7777久久| 精品视频免费在线 | 精品视频一区二区三区在线观看 | 99re视频在线 | 精品影院 | 国产精品地址 | 国产精品一区二区三区四区 | 国产一区二区三区四区三区四 | 亚洲黄色高清视频 | 国产免费一级片 | www.一区二区三区 | 欧美福利精品 | 欧美成人激情 | 韩日有码| 视频一区中文字幕 |