自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:說(shuō)說(shuō)主從復(fù)制的實(shí)現(xiàn)原理?

數(shù)據(jù)庫(kù) MySQL
MySQL 主從復(fù)制用于多個(gè)數(shù)據(jù)庫(kù)服務(wù)器之間的數(shù)據(jù)同步,它可以提供高可用性、提高數(shù)據(jù)庫(kù)整體性能和吞吐量,以及可以進(jìn)行數(shù)據(jù)備份和數(shù)據(jù)庫(kù)恢復(fù)。

MySQL 主從復(fù)制(Master-Slave Replication)是一種數(shù)據(jù)復(fù)制技術(shù),用于在多個(gè)數(shù)據(jù)庫(kù)服務(wù)器之間的數(shù)據(jù)同步。在主從復(fù)制架構(gòu)中,一個(gè)服務(wù)器被設(shè)置為主服務(wù)器(Master),充當(dāng)數(shù)據(jù)源,其他服務(wù)器被設(shè)置為從服務(wù)器(Slave),用來(lái)復(fù)制主服務(wù)器的數(shù)據(jù)。

1.主從復(fù)制優(yōu)點(diǎn)

主從復(fù)制的主要優(yōu)點(diǎn)有以下幾個(gè):

  • 高可用性:通過(guò)將主數(shù)據(jù)庫(kù)的數(shù)據(jù)復(fù)制到一個(gè)或多個(gè)從數(shù)據(jù)庫(kù),可以在主數(shù)據(jù)庫(kù)故障時(shí)快速切換到從數(shù)據(jù)庫(kù),以實(shí)現(xiàn)系統(tǒng)的高可用性和容錯(cuò)能力,從而保證系統(tǒng)的持續(xù)可用性。
  • 提高整體性能和吞吐量:通過(guò)將讀請(qǐng)求分散到多個(gè)從服務(wù)器上進(jìn)行處理,從而減輕了主服務(wù)器的負(fù)載壓力,提高數(shù)據(jù)庫(kù)系統(tǒng)的整體性能和吞吐量。主服務(wù)器主要負(fù)責(zé)寫(xiě)操作,而從服務(wù)器主要負(fù)責(zé)讀操作,從而分擔(dān)了主服務(wù)器的壓力。
  • 數(shù)據(jù)備份和恢復(fù):通過(guò)主從同步,可以將主服務(wù)器上的數(shù)據(jù)異步復(fù)制到從服務(wù)器上,從而實(shí)現(xiàn)數(shù)據(jù)備份和災(zāi)難恢復(fù)的需求。在應(yīng)對(duì)意外數(shù)據(jù)丟失、災(zāi)難恢復(fù)或誤操作時(shí),可以使用從服務(wù)器作為數(shù)據(jù)的備份源來(lái)進(jìn)行數(shù)據(jù)恢復(fù)。

2.如何實(shí)現(xiàn)主從復(fù)制?

① 配置并重啟主服務(wù)器

在主服務(wù)器的配置文件(my.cnf)中添加以下參數(shù):

[mysqld] server-id = 1 # 設(shè)置服務(wù)器 ID,每個(gè)主服務(wù)器和從服務(wù)器都必須有唯一的 ID 

log_bin = /var/log/mysql/mysql-bin.log # 開(kāi)啟二進(jìn)制日志,記錄數(shù)據(jù)修改操作

以上配置完成之后,重啟 MySQL 服務(wù)器,因?yàn)橹貑⒘?MySQL 服務(wù)才能讓配置生效。

② 創(chuàng)建用于主從復(fù)制的用戶

登錄到主服務(wù)器上,執(zhí)行以下命令:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';    -- 替換為實(shí)際的用戶名和密碼
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

③ 查看主服務(wù)器狀態(tài)

在 MySQL 主服務(wù)器中,執(zhí)行以下命令,記錄下 File 和 Position 的值,后續(xù)用于配置從服務(wù)器:

SHOW MASTER STATUS;

④ 配置并重啟從服務(wù)器

在從服務(wù)器的配置文件(my.cnf)中添加以下參數(shù):

[mysqld] server-id = 2 # 設(shè)置服務(wù)器 ID,每個(gè)主服務(wù)器和從服務(wù)器都必須有唯一的 ID

重啟從服務(wù)器,讓以上配置生效。

⑤ 在從服務(wù)器上設(shè)置主服務(wù)器信息

登錄到從服務(wù)器的 MySQL 中,執(zhí)行以下命令(將 MASTER_HOST、MASTER_USER、MASTER_PASSWORD、MASTER_LOG_FILE 和 MASTER_LOG_POS 替換為對(duì)應(yīng)的值):

CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', 
MASTER_PASSWORD='password', MASTER_LOG_FILE='binlog_file', 
MASTER_LOG_POS=log_file_position;

⑥ 啟動(dòng)從服務(wù)器的復(fù)制進(jìn)程

執(zhí)行以下命令啟動(dòng)從服務(wù)器的復(fù)制進(jìn)程:

START SLAVE;

⑦ 檢查從服務(wù)器的復(fù)制狀態(tài)

執(zhí)行以下命令,確保 Slave_IO_Running 和 Slave_SQL_Running 的值都為 "YES":

SHOW SLAVE STATUS \G;

3.主從復(fù)制原理

MySQL 數(shù)據(jù)庫(kù)的主從復(fù)制主要是基于 Binary Log(二進(jìn)制文件,簡(jiǎn)稱 bin log)實(shí)現(xiàn)的,它的實(shí)現(xiàn)流程如下:

圖片圖片

它的主要執(zhí)行流程如下:

  • 主數(shù)據(jù)庫(kù)接收到一個(gè)寫(xiě)操作(如 INSERT、UPDATE、DELETE)時(shí),會(huì)將這個(gè)操作記錄到二進(jìn)制日志(Binary Log)中,將數(shù)據(jù)修改的操作按順序記錄下來(lái)。
  • 從數(shù)據(jù)庫(kù) IO 線程會(huì)自動(dòng)連接主服務(wù),從二進(jìn)制中讀取同步數(shù)據(jù),記錄到中繼日志(Relay Log)中。
  • 從數(shù)據(jù)庫(kù)的 SQL 線程會(huì)定期從中繼日志中獲取同步數(shù)據(jù),寫(xiě)入到從數(shù)據(jù)庫(kù)中。

4.Bin Log 日志格式

Binary Log 二級(jí)制日志,它總共有以下三種格式(不同的日志格式?jīng)Q定了不同的主從同步效果):

  • STATEMENT 格式(語(yǔ)句模式,出現(xiàn)在 MySQL 5.1 之前):在這種格式下,binlog 記錄的是執(zhí)行的 SQL 語(yǔ)句的文本。

a.優(yōu)點(diǎn):日志文件通常較小,復(fù)制效率較高。

b.缺點(diǎn):在某些情況下,由于數(shù)據(jù)庫(kù)環(huán)境的差異(如表結(jié)構(gòu)、字符集等),在從服務(wù)器上重放這些 SQL 語(yǔ)句可能會(huì)導(dǎo)致不一致的結(jié)果。例如,獲取當(dāng)前時(shí)間的函數(shù)或存儲(chǔ)過(guò)程等,可能會(huì)導(dǎo)致數(shù)據(jù)不一致。

  • ROW 格式(行模式,誕生于 MySQL 5.1):在這種格式下,binlog 記錄的是每一行數(shù)據(jù)更改的具體內(nèi)容。

a.優(yōu)點(diǎn):能夠精確地記錄數(shù)據(jù)的變化,避免了 STATEMENT 格式中的環(huán)境依賴問(wèn)題,提供了更強(qiáng)的一致性保證。

b.缺點(diǎn):日志文件可能會(huì)比 STATEMENT 格式大,因?yàn)橛涗浟嗣恳恍械脑敿?xì)變化。此外,ROW 格式的日志在進(jìn)行大量數(shù)據(jù)更新時(shí)可能會(huì)導(dǎo)致更高的 I/O 開(kāi)銷。

  • MIXED 格式(混合模式):在這種格式下,binlog 可以根據(jù)具體的 SQL 語(yǔ)句和操作自動(dòng)選擇使用 STATEMENT 或 ROW 格式。

a.優(yōu)點(diǎn):結(jié)合了 STATEMENT 和 ROW 格式的優(yōu)點(diǎn),能夠在保證一致性的同時(shí)盡可能地優(yōu)化日志大小和復(fù)制性能。

b.缺點(diǎn):由于混合使用了兩種格式,可能需要更復(fù)雜的管理和監(jiān)控。在某些特定情況下,MIXED 格式可能無(wú)法達(dá)到最優(yōu)的性能或一致性。

5.主從復(fù)制模式

MySQL 中主要有以下兩種主從復(fù)制的模式,分別是異步復(fù)制和半同步復(fù)制。

  • 異步復(fù)制:MySQL 主從復(fù)制中最常見(jiàn)和默認(rèn)的模式。在異步復(fù)制模式中,主服務(wù)器將數(shù)據(jù)修改操作記錄到二進(jìn)制日志(Binary Log)中,并將日志傳輸給從服務(wù)器。從服務(wù)器接收到二進(jìn)制日志后,會(huì)異步地應(yīng)用這些日志進(jìn)行數(shù)據(jù)復(fù)制。

a.優(yōu)點(diǎn):它的優(yōu)點(diǎn)是及時(shí)響應(yīng)給使用者,主服務(wù)器不會(huì)受到從服務(wù)器的影響而等待確認(rèn),可以提高主服務(wù)器的性能。

b.缺點(diǎn):由于是異步復(fù)制,可能存在數(shù)據(jù)傳輸?shù)难舆t,且從服務(wù)器上的復(fù)制過(guò)程是不可靠的。如果主服務(wù)器故障,尚未應(yīng)用到從服務(wù)器的數(shù)據(jù)可能會(huì)丟失。

  • 半同步復(fù)制:半同步復(fù)制是 MySQL 主從復(fù)制中的一種增強(qiáng)模式。在半同步復(fù)制模式中,主服務(wù)器將數(shù)據(jù)修改操作記錄到二進(jìn)制日志,并等待至少一個(gè)從服務(wù)器確認(rèn)已接收到并應(yīng)用了這些日志后才繼續(xù)執(zhí)行后續(xù)操作。

a.優(yōu)點(diǎn):可以提供更高的數(shù)據(jù)一致性和可靠性,確保至少一個(gè)從服務(wù)器與主服務(wù)器保持同步。如果主服務(wù)器故障,已經(jīng)確認(rèn)接收并應(yīng)用到從服務(wù)器的數(shù)據(jù)不會(huì)丟失。

b.缺點(diǎn):由于半同步復(fù)制需要等待從服務(wù)器的確認(rèn),因此相對(duì)于異步復(fù)制,會(huì)增加一定的延遲,可能會(huì)影響主服務(wù)器的性能。

如果對(duì)數(shù)據(jù)一致性和可靠性要求較高,可以考慮使用半同步復(fù)制;如果對(duì)延遲和主服務(wù)器性能要求較高,可以繼續(xù)使用異步復(fù)制,根據(jù)實(shí)際需求調(diào)整復(fù)制模式。

小結(jié)

MySQL 主從復(fù)制用于多個(gè)數(shù)據(jù)庫(kù)服務(wù)器之間的數(shù)據(jù)同步,它可以提供高可用性、提高數(shù)據(jù)庫(kù)整體性能和吞吐量,以及可以進(jìn)行數(shù)據(jù)備份和數(shù)據(jù)庫(kù)恢復(fù)。MySQL 主從復(fù)制是通過(guò) bin log 實(shí)現(xiàn)的,主服務(wù)寫(xiě)入操作會(huì)同時(shí)添加到 bin log 中,而從數(shù)據(jù)庫(kù)定期拉取主數(shù)據(jù)庫(kù)的 bin log,然后將拉取的數(shù)據(jù)存放到自己的 relay log 中,之后再由單獨(dú) SQL 線程將數(shù)據(jù)寫(xiě)入到從數(shù)據(jù)庫(kù)中,此時(shí) MySQL 的主從同步就完成了。

責(zé)任編輯:武曉燕 來(lái)源: 磊哥和Java
相關(guān)推薦

2024-11-15 15:27:09

2025-04-07 00:00:00

MySQL數(shù)據(jù)庫(kù)服務(wù)器

2024-07-04 17:22:23

2023-12-29 13:45:00

2024-02-21 16:42:00

2024-08-22 10:39:50

@Async注解代理

2024-03-05 10:33:39

AOPSpring編程

2024-02-29 16:49:20

volatileJava并發(fā)編程

2024-08-29 16:30:27

2024-08-12 17:36:54

2024-03-14 14:56:22

反射Java數(shù)據(jù)庫(kù)連接

2024-07-31 08:28:37

DMAIOMMap

2024-12-06 07:00:00

2024-09-20 08:36:43

零拷貝數(shù)據(jù)傳輸DMA

2024-03-22 06:56:24

零拷貝技術(shù)數(shù)據(jù)傳輸數(shù)據(jù)拷貝

2024-10-12 16:25:12

2024-03-28 10:37:44

IoC依賴注入依賴查找

2021-06-07 17:12:22

線程安全Atomic

2024-06-04 09:02:03

2021-05-20 08:34:03

CDN原理網(wǎng)絡(luò)
點(diǎn)贊
收藏

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