最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的binlog日志操作示例

 更新時間:2026年01月12日 14:32:44   作者:ruleslol  
binlog是MySQL用于記錄所有數(shù)據(jù)變更操作的文件,主要用于數(shù)據(jù)恢復、主從復制和審計追蹤,這篇文章給大家介紹MySQL中的binlog日志,感興趣的朋友跟隨小編一起看看吧

一、什么是binlog?

binlog(二進制日志)是MySQL用來記錄所有數(shù)據(jù)變更操作的文件。

就像一個"監(jiān)控錄像",MySQL把每一個INSERT、UPDATE、DELETE操作都記錄下來。

二、為什么需要binlog?

想象一個場景:你的電商系統(tǒng)突然宕機了,已經(jīng)處理的訂單數(shù)據(jù)丟失。這時候有了binlog就像有了"黑匣子",你可以用它來恢復丟失的數(shù)據(jù)。

2-1、binlog的主要用途有三個:

1. 數(shù)據(jù)恢復 - 系統(tǒng)故障時,可以用binlog恢復到某個時間點的數(shù)據(jù)狀態(tài)

2. 主從復制 - 從庫通過讀主庫的binlog來保持數(shù)據(jù)同步。這是構(gòu)建高可用系統(tǒng)的基礎(chǔ)

3. 審計追蹤 - 可以查看誰在什么時間修改了什么數(shù)據(jù)

2-2、binlog的三種格式

1、STATEMENT格式(記錄SQL語句)

比如你執(zhí)行:UPDATE users SET age = age + 1 WHERE id > 100
binlog就記錄這條SQL語句原文

優(yōu)點:記錄量小,節(jié)省空間

缺點:某些函數(shù)(如NOW())可能導致從庫數(shù)據(jù)不一致

2、ROW格式(記錄行數(shù)據(jù)變化)

不記錄SQL語句,而是記錄"id=101的用戶age字段從20變成21"
詳細記錄每一行數(shù)據(jù)變化前后的值

優(yōu)點:最安全,不會有數(shù)據(jù)不一致的問題

缺點:記錄量大,占用空間多

3、MIXED格式(混合模式)

MySQL智能選擇:普通操作用STATEMENT格式,可能有問題的操作用ROW格式

三、如何啟用binlog?

編輯MySQL配置文件 my.cnf

[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin
binlog-format = ROW
expire-logs-days = 7

然后重啟MySQL服務。

四、實際操作示例

查看binlog是否啟用:

SHOW VARIABLES LIKE 'log_bin';
-- 結(jié)果:ON 表示已啟用

查看當前binlog文件列表:

SHOW BINARY LOGS;
-- 顯示:mysql-bin.000001, mysql-bin.000002 等

查看binlog內(nèi)容(以可讀的方式):

mysqlbinlog /var/log/mysql/mysql-bin.000001

輸出會顯示類似這樣的內(nèi)容:

# at 154
#250107 10:30:45 server id 1  end_log_pos 235
  Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1704597045/*!*/;
INSERT INTO users (id, name, age) VALUES (1, 'Alice', 25)

4-1、一個完整的場景理解

假設(shè)你有個電商系統(tǒng):

10:00 - 用戶購買商品,訂單狀態(tài)改為"已支付"
10:05 - 系統(tǒng)宕機了
10:10 - 系統(tǒng)恢復,但這5分鐘的數(shù)據(jù)丟了
此時你可以:
1. 查看binlog中10:00-10:05的所有操作
2. 用mysqlbinlog工具恢復這部分數(shù)據(jù)
3. 系統(tǒng)恢復正常

五、三個日志的作用

  • undo log:用于事務回滾,記錄數(shù)據(jù)修改前的舊值
  • redo log:用于崩潰恢復,記錄數(shù)據(jù)修改后的新值
  • binlog:用于主從復制和數(shù)據(jù)恢復,記錄所有數(shù)據(jù)變更

5-1、三種日志的層次歸屬

日志類型所屬層次文件后綴負責模塊
BinlogServer層.000001.000002...MySQL Server
Undo Log存儲引擎層 (InnoDB)ibdata1undo001InnoDB 引擎
Redo Log存儲引擎層 (InnoDB)ib_logfile0ib_logfile1InnoDB 引擎

5-2、詳細對比三種日志

1. Binlog(二進制日志)

歸屬:Server層(所有引擎共用)
作用:主從復制 + 數(shù)據(jù)恢復

特點:
• 邏輯日志:記錄SQL語句或行變化(ROW格式記錄變化前后的值)
• 追加寫入:一直往后寫,文件滿了切下一個
• 所有引擎共享:不管用InnoDB還是MyISAM,都會記錄

為什么 Binlog 在 Server 層?

設(shè)計目標:支持所有存儲引擎的主從復制

2. Undo Log(回滾日志)

歸屬:存儲引擎層(InnoDB特有)
作用:事務回滾 + MVCC多版本控制

特點:
• 物理日志:記錄數(shù)據(jù)修改前的舊版本
• 循環(huán)使用:空間會被復用
• 實現(xiàn)MVCC:提供事務的隔離性(可重復讀)

3. Redo Log(重做日志)

歸屬:存儲引擎層(InnoDB特有)
作用:崩潰恢復 + 保證持久性
特點:
• 物理日志:記錄數(shù)據(jù)頁的物理變化
• 循環(huán)寫入:固定大小文件循環(huán)寫
• Write-Ahead Logging:先寫日志,后寫數(shù)據(jù)

為什么 Redo/Undo 在引擎層?

設(shè)計目標:事務實現(xiàn)是引擎自己的事

不同引擎的事務實現(xiàn)不同
• InnoDB:需要 Redo/Undo
• MyISAM:根本沒有事務,不需要這些日志

只有 InnoDB 需要 Redo/Undo Log 嗎?

是的!

  • MyISAM:沒有事務,崩潰可能丟數(shù)據(jù)
  • Memory:數(shù)據(jù)在內(nèi)存,重啟就丟

到此這篇關(guān)于MySQL中的binlog日志操作示例的文章就介紹到這了,更多相關(guān)mysql binlog日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 10個MySQL性能調(diào)優(yōu)的方法

    10個MySQL性能調(diào)優(yōu)的方法

    本文介紹了10個MySQL性能調(diào)優(yōu)的方法,每個方法的講解都很細致,非常實用,,需要的朋友可以參考下
    2015-07-07
  • MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法(含舉例)

    MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法(含舉例)

    今天學mysql函數(shù)的時候在自己服務器上的MySQL碰見了個奇怪的問題,下面這篇文章主要給大家介紹了關(guān)于MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法,需要的朋友可以參考下
    2023-01-01
  • MySQL的慢日志線上問題及優(yōu)化方案

    MySQL的慢日志線上問題及優(yōu)化方案

    給大家詳細分析了MySQL慢日志線上問題分析及功能優(yōu)化方案,需要的朋友跟著學習下吧。
    2017-12-12
  • 一文深入解析Mysql的開窗函數(shù)(易懂版)

    一文深入解析Mysql的開窗函數(shù)(易懂版)

    在MySQL中窗口函數(shù)是一類非常強大的函數(shù),它們允許你在不改變表數(shù)據(jù)的情況下,對數(shù)據(jù)進行復雜的分析和計算,這篇文章主要介紹了Mysql開窗函數(shù)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • MySQL低權(quán)限提權(quán)的方法

    MySQL低權(quán)限提權(quán)的方法

    在MySQL中,低權(quán)限提權(quán)是一種常見的需求,低權(quán)限用戶通過利用漏洞、存儲過程、用戶定義函數(shù)(UDF)和觸發(fā)器(Trigger)等技術(shù)手段進行權(quán)限提升,本文就來介紹一下,感興趣的可以了解一下
    2024-09-09
  • MySQL啟動報錯:InnoDB表空間丟失問題及解決方法

    MySQL啟動報錯:InnoDB表空間丟失問題及解決方法

    在啟動MySQL時,遇到了InnoDB: Tablespace 5975 was not found ,該錯誤表明MySQL在啟動過程中無法找到指定的 sw_rtu_message_202408.ibd 表空間文件,導致InnoDB存儲引擎無法繼續(xù)操作,本文給大家詳細介紹了解決方案,需要的朋友可以參考下
    2025-05-05
  • Mysql中find_in_set()函數(shù)用法詳解以及使用場景

    Mysql中find_in_set()函數(shù)用法詳解以及使用場景

    前幾天在sql查詢的時候,想要判斷數(shù)據(jù)庫中表的某一列中的值是否在List集合中,接觸到了find_in_set的使用,用起來方便快捷,下面這篇文章主要給大家介紹了關(guān)于Mysql中find_in_set()函數(shù)用法詳解以及使用場景的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • MySQL優(yōu)化之緩存優(yōu)化

    MySQL優(yōu)化之緩存優(yōu)化

    在平時被問及最多的問題就是關(guān)于 MySQL 數(shù)據(jù)庫性能優(yōu)化方面的問題,所以最近打算寫一個MySQL數(shù)據(jù)庫性能優(yōu)化方面的系列文章,希望對初中級 MySQL DBA 以及其他對 MySQL 性能優(yōu)化感興趣的朋友們有所幫助。
    2017-03-03
  • MySQL修改安全策略時報錯:ERROR?1193?(HY000)的解決辦法

    MySQL修改安全策略時報錯:ERROR?1193?(HY000)的解決辦法

    這篇文章主要給大家介紹了關(guān)于MySQL修改安全策略時報錯:ERROR?1193?(HY000):?Unknown?system?variable?‘validate_password_policy‘的解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • PhpMyAdmin 配置文件現(xiàn)在需要一個短語密碼的解決方法

    PhpMyAdmin 配置文件現(xiàn)在需要一個短語密碼的解決方法

    本文主要介紹PhpMyAdmin 配置文件現(xiàn)在需要一個短語密碼的解決方法,比較實用,希望能給大家做一個參考。
    2016-06-06

最新評論

察哈| 石城县| 靖安县| 东乌珠穆沁旗| 封丘县| 三原县| 钦州市| 松溪县| 子洲县| 南陵县| 桃园县| 会宁县| 古蔺县| 凤翔县| 日喀则市| 江津市| 黔西县| 淅川县| 韶关市| 茶陵县| 雅江县| 白城市| 临汾市| 广平县| 榆树市| 建德市| 晋城| 博客| 浦东新区| 宜春市| 桑日县| 松滋市| 左贡县| 塘沽区| 浦江县| 赣州市| 屯门区| 合阳县| 永德县| 甘洛县| 平遥县|