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

阿里二面:聊聊 MySQL 主從同步方案的優缺點

數據庫 MySQL
MySQL Replication 是 MySQL 官方提供的主從同步方案,用于將 MySQL 主庫的數據同步到從庫中,從庫可以供應用程序讀取數據。

大家好,我是君哥。今天來聊一聊 MySQL 主從架構。

MySQL Replication 是 MySQL 官方提供的主從同步方案,用于將 MySQL 主庫的數據同步到從庫中,從庫可以供應用程序讀取數據。

1.簡介

Replication 是目前 MySQL 使用最多的災備方案,主要有 3 個作用:

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

下面是一個 MySQL Replication 的案例。

圖片圖片

在上面的例子中,有一個主庫,三個從庫,通過 Replication,主庫生成 events 的 binlog 發給 slave,Slave 將收到的 binlog 拷貝到 relaylog,然后解析 relaylog 中的命令進行執行,實現主從數據同步。

2.同步原理

MySQL 通過 binlog 實現同步過程中,會用到 3 個線程:

  • IO thread: 從庫執行 START SLAVE 語句時,會創建一個 IO thread,負責連接主節點,請求更新的 binlog,接收到 binlog 后寫入 relaylog;
  • dump thread:主庫接收到從庫的 binlog 請求后,創建一個 dump thread,把 binlog 同步給從庫;
  • sql thread:讀取 relaylog,解析 relaylog 的命令并執行,將數據落庫。

整個同步流程如下:

圖片圖片

  • 在從庫上執行 change master 命令,設置要連接主庫的用戶名、密碼、ip、端口以及請求同步的 binlog 中的位置,這個位置包含文件名和binlog offset;
  • 從庫執行 start slave 命令,這時會啟動上面的 IO thread 和 sql thread,其中 IO thread 負責跟主庫建立連接;
  • 主庫收到從庫的連接請求后,校驗用戶名密碼;
  • 主庫校驗通過后創建 dump thread,按照從庫請求 binlog 的 offset 將 binlog 發給從庫;
  • 從庫收到主庫發送的 binlog 后,將日志寫入 relaylog;
  • sql thread 讀取 relaylog,解析出命令后執行。

3.優缺點

前面講到,主從同步有讀寫分離、實現災備、水平擴展等優點。那主從同步有哪些缺點呢?最大的缺點就是主從延遲

導致主從延遲的主要原因如下:

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

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

  • 優化業務邏輯,避免使用大事務,或者大事務場景盡量放在業務低峰期執行;
  • 提高從庫所在機器的性能;
  • 保障網絡性能,避免網絡延遲;
  • 引入 semi-sync 半同步復制,配合異步復制。

主從同步的第二個缺點就是數據丟失

MySQL 有 3 種主從復制方式:

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

MySQL 中默認采用異步復制,這樣很容易導致數據丟失。一個好的方式就是采用 semi-sync 半同步復制插件。不過 semi-sync 存在一個問題,主庫寫數據到 binlog 后執行 commit,才會給從庫同步數據。如果從庫還沒有返回 ACK,主庫發生了宕機,從庫還沒有寫完 relaylog 就被選擇為主庫,也會發生數據丟失。

為了解決這個問題,MySQL 5.7 引入了增強版半同步復制。主庫寫入數據到 binlog 后,就給從庫進行同步,直到至少一個從庫返回給主庫 ACK,主庫才會進行 commit 操作。

4.總結

本文介紹了 MySQL 主從同步方案的優缺點,希望能對你使用和理解 MySQL 有所幫助。

責任編輯:武曉燕 來源: 軍哥聊技術
相關推薦

2022-04-02 10:23:12

MySQL數據庫

2025-04-01 12:00:00

gRPC分布式系微服務

2010-11-23 13:57:50

MySQL獨立表空間

2024-06-27 12:26:32

2022-08-18 08:24:19

Mysql數據庫

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

云存儲公共云遷移

2010-05-13 14:37:26

MySQL備份數據庫

2011-04-15 09:05:18

VMware私有云

2017-09-12 08:03:29

數據庫MySQL主庫

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缺點優點

2009-06-19 18:36:15

JPAHibernate

2018-05-17 11:05:56

2010-06-21 14:14:33

OSPF協議

2022-07-18 13:36:13

零信任網絡安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 波多野结衣一区二区 | 97国产成人| 一区二区视频在线观看 | 久久久久中文字幕 | 欧美黑人体内she精在线观看 | 久久91精品 | 日韩在线精品视频 | 亚洲精选久久 | 日韩精品一区二区三区四区视频 | 国产精品久久久久久久免费大片 | 成人高清网站 | 欧美精品一区二区三区一线天视频 | 精品日韩一区二区 | 亚洲欧美精 | 99精品久久 | 亚洲视频国产视频 | 久久精品中文 | 国产在线网站 | 成人亚洲视频 | 97久久精品午夜一区二区 | 欧美国产视频 | 在线观看成人免费视频 | 成人欧美一区二区三区黑人孕妇 | av在线黄 | 日本电影免费完整观看 | www午夜视频| 国产精品一区二区三区在线 | 亚洲狠狠| 中文在线一区二区 | 伊伊综合网| 日韩在线精品视频 | 亚州综合一区 | 成人精品国产一区二区4080 | 亚洲欧美另类在线 | 999热在线视频 | 久久99精品久久久久久国产越南 | 精品国产欧美 | 天天操综合网站 | 亚洲精品二区 | 鸳鸯谱在线观看高清 | 黑人巨大精品 |