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

MySQL 8.0與MySQL 5.7的binlog差異小結(jié)

數(shù)據(jù)庫(kù) MySQL
Binlog是MySQL的一個(gè)重要特性,它是一個(gè)用于記錄數(shù)據(jù)庫(kù)變更的二進(jìn)制日志文件,每一條會(huì)修改數(shù)據(jù)的SQL語(yǔ)句都會(huì)被記錄在binlog中。

MySQL是一個(gè)廣泛使用的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它提供了許多強(qiáng)大的功能,如事務(wù)、存儲(chǔ)過(guò)程、觸發(fā)器、視圖、全文索引等。但是,MySQL也有一些不足之處,比如數(shù)據(jù)的安全性和可靠性。如果數(shù)據(jù)庫(kù)發(fā)生故障或損壞,如何恢復(fù)數(shù)據(jù)?如果數(shù)據(jù)庫(kù)需要進(jìn)行主從復(fù)制或讀寫分離,如何保證數(shù)據(jù)的一致性?這些問(wèn)題都需要借助一個(gè)特殊的機(jī)制來(lái)解決,那就是binlog。

1. binlog的主要用途

binlog是MySQL的一個(gè)重要特性,它是一個(gè)用于記錄數(shù)據(jù)庫(kù)變更的二進(jìn)制日志文件,每一條會(huì)修改數(shù)據(jù)的SQL語(yǔ)句都會(huì)被記錄在binlog中。通過(guò)binlog,我們可以實(shí)現(xiàn)以下幾個(gè)目的:

數(shù)據(jù)恢復(fù):如果數(shù)據(jù)庫(kù)發(fā)生故障或損壞,我們可以通過(guò)binlog來(lái)恢復(fù)數(shù)據(jù),只需要將binlog中的SQL語(yǔ)句按照順序重新執(zhí)行一遍,就可以將數(shù)據(jù)庫(kù)恢復(fù)到故障發(fā)生前的狀態(tài)。

主從復(fù)制:如果數(shù)據(jù)庫(kù)需要進(jìn)行主從復(fù)制,我們可以通過(guò)binlog來(lái)實(shí)現(xiàn),只需要將主庫(kù)的binlog傳輸?shù)綇膸?kù),并在從庫(kù)上執(zhí)行binlog中的SQL語(yǔ)句,就可以將從庫(kù)的數(shù)據(jù)與主庫(kù)保持一致。

審計(jì):如果數(shù)據(jù)庫(kù)需要進(jìn)行審計(jì),我們可以通過(guò)binlog來(lái)實(shí)現(xiàn),只需要分析binlog中的SQL語(yǔ)句,就可以了解數(shù)據(jù)庫(kù)的變更歷史,如何操作,何時(shí)操作,操作了哪些數(shù)據(jù)等。

可以看出,binlog是MySQL的一個(gè)非常重要的特性,它對(duì)于數(shù)據(jù)庫(kù)的安全性和可靠性有著重要的作用。但是,隨著MySQL的版本更新,binlog也發(fā)生了一些變化,這些變化可能會(huì)影響我們對(duì)binlog的使用和理解。在本文中,我們將介紹MySQL 8.0版本與MySQL 5.7版本在binlog方面的主要差異,以及這些差異的原因和影響。

2. binlog格式的變化

binlog的格式?jīng)Q定了binlog中記錄的內(nèi)容和形式,MySQL支持三種binlog格式,分別是:

STATEMENT:每一條會(huì)修改數(shù)據(jù)的SQL語(yǔ)句都會(huì)記錄在binlog中,不記錄具體的數(shù)據(jù)變化,而是記錄SQL語(yǔ)句的上下文信息,如執(zhí)行時(shí)間、用戶、數(shù)據(jù)庫(kù)、表等。

ROW:每一條會(huì)修改數(shù)據(jù)的SQL語(yǔ)句都會(huì)記錄在binlog中,不記錄SQL語(yǔ)句本身,而是記錄每一行數(shù)據(jù)的變化,如插入、更新、刪除等。

MIXED:根據(jù)SQL語(yǔ)句的類型和特性,自動(dòng)選擇STATEMENT或ROW格式來(lái)記錄binlog,以達(dá)到最佳的效果。

MySQL 8.0版本與MySQL 5.7版本在binlog格式方面的主要差異是:

  • MySQL 8.0版本引入了一個(gè)新的系統(tǒng)變量binlog_expire_logs_seconds,用來(lái)設(shè)置binlog的過(guò)期時(shí)間,單位是秒。這個(gè)變量比MySQL 5.7的expire_logs_days更精確,可以根據(jù)需要?jiǎng)討B(tài)調(diào)整。
  • MySQL 8.0版本支持了事務(wù)性數(shù)據(jù)字典,這意味著數(shù)據(jù)字典的變更也會(huì)記錄在binlog中,以保證主從復(fù)制的一致性。
  • MySQL8.0版本增加了一個(gè)新的binlog事件類型TRANSACTION_PAYLOAD_EVENT,用來(lái)存儲(chǔ)事務(wù)的元數(shù)據(jù),如事務(wù)ID,事務(wù)大小,是否只讀等。這些信息可以用來(lái)優(yōu)化復(fù)制性能和監(jiān)控事務(wù)活動(dòng)。
  • MySQL8.0版本改進(jìn)了binlog的壓縮算法,使用了zstd壓縮庫(kù),可以提高壓縮比和壓縮速度,同時(shí)減少CPU的開(kāi)銷。

原因:

  • MySQL 8.0版本引入了binlog_expire_logs_seconds變量,是為了提供更靈活的binlog管理,避免binlog文件過(guò)多占用磁盤空間,也避免binlog文件過(guò)少導(dǎo)致數(shù)據(jù)恢復(fù)或復(fù)制失敗。
  • MySQL 8.0版本支持了事務(wù)性數(shù)據(jù)字典,是為了提高數(shù)據(jù)庫(kù)的可靠性和一致性,避免數(shù)據(jù)字典的損壞或不同步導(dǎo)致的問(wèn)題。
  • MySQL 8.0版本增加了TRANSACTION_PAYLOAD_EVENT事件類型,是為了提高復(fù)制的效率和穩(wěn)定性,避免復(fù)制延遲或丟失數(shù)據(jù)的問(wèn)題。
  • MySQL 8.0版本改進(jìn)了binlog的壓縮算法,是為了提高binlog的傳輸和存儲(chǔ)性能,節(jié)省網(wǎng)絡(luò)和磁盤資源,降低系統(tǒng)的負(fù)載。

影響:

  • MySQL 8.0版本引入了binlog_expire_logs_seconds變量,對(duì)于用戶來(lái)說(shuō),可以更靈活地設(shè)置binlog的過(guò)期時(shí)間,根據(jù)業(yè)務(wù)需求和資源情況進(jìn)行調(diào)整,提高binlog的管理效率。
  • MySQL8.0版本支持了事務(wù)性數(shù)據(jù)字典,對(duì)于用戶來(lái)說(shuō),可以更放心地使用MySQL,不用擔(dān)心數(shù)據(jù)字典的損壞或不同步導(dǎo)致的問(wèn)題,也可以更方便地查看和修改數(shù)據(jù)字典的信息。
  • MySQL 8.0版本增加了TRANSACTION_PAYLOAD_EVENT事件類型,對(duì)于用戶來(lái)說(shuō),可以更快速地進(jìn)行主從復(fù)制,也可以更清晰地監(jiān)控事務(wù)的活動(dòng),提高數(shù)據(jù)庫(kù)的性能和可觀察性。
  • MySQL8.0版本改進(jìn)了binlog的壓縮算法,對(duì)于用戶來(lái)說(shuō),可以更節(jié)省網(wǎng)絡(luò)和磁盤資源,也可以更快地傳輸和存儲(chǔ)binlog,提高數(shù)據(jù)庫(kù)的性能和可靠性。

3. binlog管理的變化

binlog的管理主要涉及到binlog的生成、傳輸、存儲(chǔ)、刪除等操作,MySQL提供了一些命令和變量來(lái)進(jìn)行binlog的管理,如:

  • show master logs:查看所有binlog的日志列表。
  • show master status:查看binlog日志狀態(tài)。
  • flush logs:刷新binlog日志文件,刷新之后會(huì)創(chuàng)建一個(gè)新的binlog日志文件。
  • reset master:清空所有的binlog日志文件。
  • mysqlbinlog:查看或解析binlog日志文件的內(nèi)容。
  • log_bin:binlog的開(kāi)關(guān)。
  • binlog_format:binlog日志的格式。
  • expire_logs_days:binlog日志的過(guò)期天數(shù)。
  • sync_binlog:binlog日志的同步策略。

MySQL 8.0版本與MySQL 5.7版本在binlog管理方面的主要差異是:

  • MySQL 8.0版本引入了一個(gè)新的系統(tǒng)變量binlog_expire_logs_seconds,用來(lái)設(shè)置binlog的過(guò)期時(shí)間,單位是秒。這個(gè)變量比MySQL 5.7的expire_logs_days更精確,可以根據(jù)需要?jiǎng)討B(tài)調(diào)整
  • MySQL8.0版本引入了一個(gè)新的系統(tǒng)變量binlog_rotate_encryption_master_key_at_startup,用來(lái)設(shè)置是否在啟動(dòng)時(shí)旋轉(zhuǎn)加密的binlog主鍵。如果這個(gè)變量設(shè)置為ON,那么每次服務(wù)器重啟時(shí),都會(huì)生成一個(gè)新的binlog加密密鑰,并用作新的binlog主鍵。這樣可以增強(qiáng)binlog的安全性,防止密鑰泄露或被破解
  • MySQL 8.0版本支持使用ALTER INSTANCE ROTATE BINLOG MASTER KEY語(yǔ)句手動(dòng)旋轉(zhuǎn)binlog主鍵。當(dāng)使用這個(gè)語(yǔ)句時(shí),服務(wù)器會(huì)執(zhí)行以下操作:生成一個(gè)新的binlog加密密鑰并存儲(chǔ)在密鑰環(huán)上,用作新的binlog主鍵;旋轉(zhuǎn)所有通道上的binlog和中繼日志文件;使用新的binlog主鍵加密新的和現(xiàn)有的binlog和中繼日志文件的文件密碼;刪除不再使用的binlog加密密鑰
  • MySQL8.0版本支持使用binlog_row_event_max_size系統(tǒng)變量設(shè)置row格式的binlog事件的最大大小,單位是字節(jié)。這個(gè)變量是一個(gè)軟限制,盡可能地將binlog中的行分組到不超過(guò)這個(gè)值的事件中。如果一個(gè)事件無(wú)法分割,那么最大大小可以超過(guò)。這個(gè)變量的值必須是(或者會(huì)被向下取整到)256的倍數(shù)。默認(rèn)值是8192字節(jié)

4. 小結(jié)

MySQL 8.0和MySQL 5.7之間的二進(jìn)制日志(binlog)主要的變化如下:

默認(rèn)的binlog格式:MySQL 8.0默認(rèn)使用ROW格式,ROW格式記錄每行數(shù)據(jù)的變化,而STATEMENT格式記錄SQL語(yǔ)句的執(zhí)行

新的binlog緩沖機(jī)制:MySQL 8.0引入了一種新的binlog緩沖機(jī)制,可以提高性能并減少磁盤I/O。在MySQL 5.7中,使用了基于磁盤的binlog緩沖

binlog加密:MySQL 8.0引入了二進(jìn)制日志的加密功能,可以在傳輸過(guò)程中對(duì)binlog進(jìn)行加密。MySQL 5.7沒(méi)有原生支持二進(jìn)制日志的加密

在線binlog重置:MySQL 8.0支持在線重置二進(jìn)制日志,而MySQL 5.7需要停止和啟動(dòng)MySQL服務(wù)進(jìn)行重置

新的事務(wù)描述事件:MySQL 8.0引入了新的ANONYMOUS_GTID_EVENT事務(wù)描述事件,用于記錄匿名GTID的信息。MySQL 5.7中沒(méi)有這個(gè)事件

GTID的一些改進(jìn):MySQL 8.0對(duì)GTID的處理進(jìn)行了一些改進(jìn),提高了復(fù)制的可靠性和易用性其他性能和安全性的改進(jìn):

MySQL 8.0包含許多其他性能和安全性的改進(jìn),包括更好的并行復(fù)制支持、更好的崩潰安全性等

責(zé)任編輯:姜華 來(lái)源: 數(shù)據(jù)庫(kù)干貨鋪
相關(guān)推薦

2020-12-31 05:35:53

MySQL 8.0MySQL 5.7JSON

2019-09-24 13:53:19

MySQLMySQL 8.0數(shù)據(jù)庫(kù)

2024-04-18 09:00:00

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

2020-07-31 13:55:57

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

2020-11-03 14:30:02

MySQL5.7MyS8.0數(shù)據(jù)庫(kù)

2025-01-22 16:00:00

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

2019-07-19 15:53:45

MySQL 5.7MySQL 8.0MySQL

2023-11-02 08:44:58

2024-08-08 07:38:42

2023-10-25 07:59:40

2010-05-18 11:28:57

MySQL binlo

2022-06-20 12:00:43

MySQL數(shù)據(jù)庫(kù)升級(jí)

2023-06-27 07:29:30

dba+開(kāi)源工具Binlog

2022-09-23 13:24:21

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

2010-05-18 12:24:16

MySQL binlo

2021-06-03 19:13:06

MySQLJson數(shù)據(jù)

2024-03-25 07:30:03

MySQL數(shù)據(jù)庫(kù)SQL日志

2021-07-12 08:06:32

Java

2015-04-15 13:33:23

2010-06-04 14:10:09

MySQL_fetch
點(diǎn)贊
收藏

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