Mysql 的 binlog 有幾種格式?

MySQL 的二進制日志(binlog)有三種格式,每種格式都有其特定的用途和優缺點。以下是詳細描述:

1. STATEMENT

  • 描述: 記錄的是 SQL 語句。
  • 特點:
    • 每條更改數據的 SQL 語句都會記錄在 binlog 中。
    • 相對較小,因為只記錄了 SQL 語句本身。
  • 優點:
    • 日志量小,減少了 I/O 開銷。
    • 更適合基于 SQL 語句的復制。
  • 缺點:
    • 某些情況下,語句在主從服務器上執行的結果可能會不一致(如包含非確定性函數的語句)。
    • 對于某些復雜語句,重放時可能會出問題。
  • 應用場景:
    • 適用于簡單、確定性高的 SQL 操作。

2. ROW

  • 描述: 記錄的是每一行被修改的具體數據。
  • 特點:
    • 對于每一個被修改的行,記錄修改前后的數據。
    • 日志量大,因為需要記錄每一行的數據變更。
  • 優點:
    • 更精確,避免了語句格式下可能產生的不一致性。
    • 支持所有類型的 SQL 操作。
  • 缺點:
    • 日志量大,I/O 開銷大。
    • 在大數據量操作時,可能會導致 binlog 文件增長迅速。
  • 應用場景:
    • 適用于高一致性要求的環境,尤其是復雜的 SQL 操作和觸發器等。

3. MIXED

  • 描述: 結合了 STATEMENT 和 ROW 兩種格式的優點。
  • 特點:
    • MySQL 會根據每條 SQL 語句的具體情況,在 STATEMENT 和 ROW 格式之間自動選擇。
    • 對于大多數確定性的 SQL 語句,使用 STATEMENT 格式。
    • 對于非確定性 SQL 語句或復雜操作,使用 ROW 格式。
  • 優點:
    • 兼顧了兩種格式的優點,在一定程度上減少了 binlog 的大小,同時保證了一致性。
  • 缺點:
    • 復雜度較高,需要 MySQL 自行判斷使用哪種格式。
    • 可能在某些情況下無法完全避免 ROW 格式帶來的日志量大問題。
  • 應用場景:
    • 適用于需要兼顧性能和一致性的環境。

配置方式

可以通過在 MySQL 配置文件 (my.cnf) 中設置 binlog_format 參數來指定 binlog 的格式:

[mysqld]
binlog_format=STATEMENT  # 或者 ROW, MIXED

也可以在運行時通過 SQL 命令來修改 binlog 的格式:

SET GLOBAL binlog_format = 'STATEMENT';  -- 或者 'ROW', 'MIXED'

總結

  • STATEMENT: 適合簡單且確定性高的 SQL 操作,日志量小。
  • ROW: 適合高一致性要求的場景,支持復雜的 SQL 操作,日志量大。
  • MIXED: 結合兩者優點,MySQL 自動選擇合適的格式,適合需要平衡性能和一致性的場景。

選擇適合的 binlog 格式需要根據具體的應用需求和環境來決定,以確保在性能和數據一致性之間找到最佳平衡。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15804.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15804.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字圖像處理岡塞雷斯第四版課后習題答案【英文原版】

第二章 第三章 . 第四章 傅里葉變換是一個線性過程,而計算梯度的平方根和平方根則是非線性運算。傅里葉變換可以用來計算微分的差值(如問題4.50),但必須在空間域中直接計算平方和平方根值。 (a)實際上,由于高通操作,環有一個暗中心…

在已創建的git工程中添加.gitignore

有些代碼創建git時,為了方便將所有文件都加入了git管理,但實際有些庫的Makefile文件和編譯目錄的文件不需要加入管理,否則每次提交或編譯后,git diff將看到非常多的冗余信息。而我們修改的核心代碼都淹沒在這些大量無用的信息里面…

Golang:gammazero/deque是一個快速環形緩沖區deque(雙端隊列)實現

gammazero/deque是一個快速環形緩沖區deque(雙端隊列)實現。 文檔 https://github.com/gammazero/deque 安裝 go get github.com/gammazero/deque代碼示例 先入先出隊列 package mainimport ("fmt""github.com/gammazero/deque&quo…

留守兒童|基于SprinBoot+vue的留守兒童愛心網站(源碼+數據庫+文檔)

留守兒童愛心網站 目錄 基于SprinBootvue的留守兒童愛心網站 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取: 博主介紹&…

STM_HAL_TIM_IC_(輸入捕獲,捕獲PWM波)

介紹 TM32微控制器提供了輸入捕獲(Input Capture)功能,這是一種用于精確測量外部信號脈沖寬度和周期的強大技術。輸入捕獲通常與定時器(如TIM)的高級控制定時器(TIM1和TIM8)或通用定時器&#…

MySQL之Schema與數據類型優化和創建高性能的索引(一)

Schema與數據類型優化 只修改.frm文件 從前面的例子中可以看到修改表的.frm文件是很快的,但MySQL有時候會在沒有必要的時候也重建.如果愿意冒一些風險,可以讓MySQL做一些其他類型的修改而不用重建表。下面這些操作是有可能不需要重建表的: 1.移除(不是…

JavaEE-文件IO2

文章目錄 前言一、字節流1.1 讀文件1.2 寫文件 二、字符流2.1 讀文件2.2 寫文件 三、文件IO三道例題 前言 在這里對Java標準庫中對文件內容的操作進行總結,總體上分為兩部分,字節流和字符流,就是以字節為單位讀取文件和以字符為單位讀取文件…

[AI Google] 介紹 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是來自 labs.google 的最新實驗,您可以查看音樂效果和圖像效果的新更新,現在在 110 多個國家可用。 生成式媒體正在改變人們構思創意并增強我們的創造力能力的方式。我們致力于與創作者和藝術家合作構建人工智能,以更好地理解這些生成…

cmake使用交叉編譯工具鏈并驗證

目錄 一、內容 二、配置 1. 準備cmake文件 2. 使用交叉編譯 三、驗證 1. 構建階段驗證 2. 編譯階段驗證 一、內容 目的:在X86環境下編譯ARM平臺軟件 編寫交叉編譯配置文件:xx.cmake 執行cmake命令時指定:cmake \ -DCMAKE_TOOLCHAIN_F…

Linux Crontab:看完這篇,還有啥不懂的嗎

在Linux系統管理中,自動化是一個至關重要的概念,它可以幫助我們節省時間、減少錯誤并提高效率。crontab> 是實現這一目標的強大工具,它允許我們安排任務在特定的時間自動執行。本文將詳細介紹 crontab 的基礎概念、語法、命令、高級技巧以…

K8S認證|CKA題庫+答案| 12. 查看Pod日志

目錄 12、查看Pod日志 CKA v1.29.0模擬系統免費下載試用: 題目: 開始操作: 1)、切換集群 2)、提取錯誤日志 3)、驗證提取結果 12、查看Pod日志 CKA v1.29.0模擬系統免費下載試用: 百度…

簡單的UDP網絡程序:多人群聊系統

本章重點 能夠實現一個簡單的udp客戶端/服務器; 1.創建套接字 我們把服務器封裝成一個類,當我們定義出一個服務器對象后需要馬上初始化服務器,而初始化服務器需要做的第一件事就是創建套接字。 ?參數說明: domain:創建套接字的域…

Nginx代理配置(專業版)

寫在前面提醒:使用代理,如果可以,請盡量支持雙協議,http、https均要支持哈。 注意:監控系統只是運行代碼,是否支持https,需要運維同學在你們的服務器上配置https證書,配置好證書&…

在 CentOS 上安裝 PostgreSQL 的全面指南

PostgreSQL 是一種功能強大的開源關系型數據庫管理系統,廣泛應用于各種領域。它提供了諸如事務處理、并發控制和數據完整性等高級功能,因此深受開發者和企業的歡迎。本指南將逐步引導您在 CentOS 上安裝 PostgreSQL,以便您充分利用其眾多優勢…

決定了,將ChatGPTer開源!主打一個大模型人人可用。

一個快速上手且極易部署的類ChatGPT開源應用,可接入 OPENAI API 或 通義千問API 開源地址: https://github.com/isnl/EsChat 大聲(偷偷)告訴你:通義千問有免費API額度可白嫖!!! 版本特性 OPENAI 和 通義千…

點云AABB、OBB包圍盒計算顯示

目錄 一、簡介 1)AABB包圍盒 2)OBB包圍盒 二、計算代碼 三、加載計算結果

什么是Promise

Promise 是 JavaScript 中的一個對象,用于處理異步操作。它代表了一個最終可能完成(也可能被拒絕)的異步操作及其結果值。Promise 對象用于更復雜的異步編程模式,包括使用 .then() 和 .catch() 鏈式調用來處理異步操作的結果。 P…

算法提高之區間最大公約數

算法提高之區間最大公約數 核心思想&#xff1a;線段樹 1.在區間上加一個數 差分 2.求一段區間的最gcd 求[l,r]的gcd 可以拆解為求**[1,l].sum(差分數組 求出來時l點的值)和[l1,r]**做gcd #include <iostream>#include <cstring>#include <algorithm>usi…

1738. 找出第 K 大的異或坐標值

1738. 找出第 K 大的異或坐標值 題目鏈接&#xff1a;1738. 找出第 K 大的異或坐標值 代碼如下&#xff1a; //列前綴異或和 //參考鏈接:https://leetcode.cn/problems/find-kth-largest-xor-coordinate-value/solutions/2790359/liang-chong-fang-fa-er-wei-qian-zhui-yi-68…

Docker數據卷(volume)

數據卷 數據卷是一個虛擬目錄&#xff0c;是容器內目錄與宿主機目錄之間映射的橋梁。&#xff08;容器內目錄與宿主機目錄對應的橋梁&#xff0c;修改宿主機對應的目錄&#xff0c;docker會映射到容器內部&#xff0c;相當于修改了容器內的&#xff0c;反之也一樣&#xff09;數…