MySQL的binlog日志獲取
mysqlbinlog 是 MySQL 解析和提取 binlog 日志的核心工具,下面整理了日常開發(fā) / 運(yùn)維中最常用的命令,按使用場景分類,適配你的實(shí)際環(huán)境(基于 /var/lib/mysql 下的 binlog 文件)。
一、基礎(chǔ)查看類(最常用)
1. 查看單個(gè) binlog 文件的完整內(nèi)容
# 查看本地 binlog 文件(基礎(chǔ)格式) mysqlbinlog /var/lib/mysql/mysql-bin.000067 # 帶行級詳情(ROW 格式下看具體數(shù)據(jù)變更,-vv 更詳細(xì)) mysqlbinlog -v /var/lib/mysql/mysql-bin.000067 mysqlbinlog -vv /var/lib/mysql/mysql-bin.000067
2. 查看 binlog 文件的基礎(chǔ)信息(起始 / 結(jié)束時(shí)間、位置)
# 只看前 50 行(快速獲取文件頭信息) mysqlbinlog /var/lib/mysql/mysql-bin.000067 | head -50 # 查看文件的起始/結(jié)束位置和時(shí)間(過濾關(guān)鍵字) mysqlbinlog /var/lib/mysql/mysql-bin.000067 | grep -E "Start|End|TIMESTAMP"
3. 按數(shù)據(jù)庫過濾查看
只提取 purchasingent 數(shù)據(jù)庫的 binlog(你的核心場景):
mysqlbinlog --database=purchasingent /var/lib/mysql/mysql-bin.000067
二、時(shí)間 / 位置篩選類(核心高頻)
1. 按時(shí)間范圍篩選
# 基礎(chǔ)用法(指定起始+結(jié)束時(shí)間) mysqlbinlog --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" /var/lib/mysql/mysql-bin.000067 # 只取起始時(shí)間之后的內(nèi)容 mysqlbinlog --start-datetime="2026-03-06 10:00:00" /var/lib/mysql/mysql-bin.000067 # 只取結(jié)束時(shí)間之前的內(nèi)容 mysqlbinlog --stop-datetime="2026-03-06 18:00:00" /var/lib/mysql/mysql-bin.000067 # 組合數(shù)據(jù)庫過濾+時(shí)間篩選(你的常用場景) mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" /var/lib/mysql/mysql-bin.000067
2. 按日志位置(Position)篩選
binlog 中每個(gè)事件都有唯一位置值,適合精準(zhǔn)篩選:
# 指定起始位置 + 結(jié)束位置 mysqlbinlog --start-position=107 --stop-position=1000 /var/lib/mysql/mysql-bin.000067 # 只取起始位置之后的內(nèi)容 mysqlbinlog --start-position=107 /var/lib/mysql/mysql-bin.000067
三、輸出 / 導(dǎo)出類(實(shí)用)
1. 導(dǎo)出到文件(便于后續(xù)分析 / 恢復(fù))
# 導(dǎo)出時(shí)間范圍的 binlog 到 sql 文件 mysqlbinlog --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" /var/lib/mysql/mysql-bin.000067 > /tmp/purchasingent_binlog_20260306.sql # 導(dǎo)出多個(gè) binlog 文件到一個(gè)文件 mysqlbinlog /var/lib/mysql/mysql-bin.000066 /var/lib/mysql/mysql-bin.000067 > /tmp/all_binlog.sql
2. 導(dǎo)出為可執(zhí)行的 SQL(去除注釋 / 無關(guān)信息)
mysqlbinlog --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 > /tmp/executable_binlog.sql # 導(dǎo)出時(shí)間范圍的 binlog 可執(zhí)行的sql到 sql 文件 mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:29:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 > /var/lib/mysql/tmp/ /purchasingent_binlog_2026030601.sql
四、遠(yuǎn)程操作類(跨服務(wù)器)
1. 遠(yuǎn)程查看 binlog
mysqlbinlog -h 192.168.1.100 -u root -p123456 -P 3306 --database=purchasingent mysql-bin.000067
2. 遠(yuǎn)程導(dǎo)出 binlog 到本地文件
mysqlbinlog -h 192.168.1.100 -u root -p123456 -P 3306 --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" mysql-bin.000067 > /tmp/remote_binlog.sql
五、特殊格式 / 功能類
1. 按字符集解析(避免亂碼)
mysqlbinlog --default-character-set=utf8mb4 /var/lib/mysql/mysql-bin.000067
2. 跳過 GTID(避免重復(fù)執(zhí)行)
適用于有 GTID 開啟的環(huán)境,導(dǎo)出的 SQL 可直接執(zhí)行:
mysqlbinlog --skip-gtids /var/lib/mysql/mysql-bin.000067 > /tmp/no_gtid_binlog.sql
3. 只顯示 DML 語句(INSERT/UPDATE/DELETE)
mysqlbinlog /var/lib/mysql/mysql-bin.000067 | grep -E "INSERT|UPDATE|DELETE"
六、常用參數(shù)速查表
| 參數(shù) | 作用 |
|---|---|
| -v/-vv | 顯示行級詳情(ROW 格式下必備) |
| --database=db_name | 只提取指定數(shù)據(jù)庫的 binlog |
| --start-datetime | 起始時(shí)間(格式:YYYY-MM-DD HH:MM:SS) |
| --stop-datetime | 結(jié)束時(shí)間(同上) |
| --start-position | 起始日志位置 |
| --stop-position | 結(jié)束日志位置 |
| --skip-gtids | 跳過 GTID 信息(便于執(zhí)行導(dǎo)出的 SQL) |
| -h/-u/-p/-P | 遠(yuǎn)程連接參數(shù)(主機(jī) / 用戶名 / 密碼 / 端口) |
| --default-character-set | 指定字符集(避免亂碼) |
| --base64-output=DECODE-ROWS | 解碼 ROW 格式的 binlog 為可讀 SQL |
總結(jié)
- 基礎(chǔ)用法:mysqlbinlog [參數(shù)] binlog文件 是核心,最常用參數(shù)為 --database、--start/stop-datetime、-v;
- 高頻場景:按時(shí)間 / 數(shù)據(jù)庫篩選 + 導(dǎo)出到文件(適配你的 purchasingent 數(shù)據(jù)庫);
- 關(guān)鍵注意:時(shí)間格式必須嚴(yán)格為 YYYY-MM-DD HH:MM:SS,ROW 格式需加 -vv 才能看到具體數(shù)據(jù)變更。
常用
示例1
# 獲取purchasingent庫中,時(shí)間范圍2026-03-06 10:20:00到2026-03-06 10:21:59 的可執(zhí)行的sql,包含Delete內(nèi)容的后50行 # grep -i 忽略大小寫(binlog 中 DELETE 可能是大寫,加 -i 避免漏查) # grep -C 50 顯示匹配行的前 50 行 + 后 50 行(也可以用 -A 50 -B 50,效果相同) # grep -A 50 僅顯示匹配行的后 50 行(After) # grep -B 50 僅顯示匹配行的前 50 行(Before) mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 |grep -i -A 50 "delete" # 獲取purchasingent庫中,時(shí)間范圍2026-03-06 10:20:00到2026-03-06 10:29:59 的可執(zhí)行的sql導(dǎo)出到purchasingent_binlog_2026030601.sql中 mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:29:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 > /var/lib/mysql/tmp/ /purchasingent_binlog_2026030601.sql
示例2
獲取purchasingent庫中d_cp_purchasingrequisition開頭的表,時(shí)間范圍2026-03-06 10:20:00到2026-03-06 10:21:59 的可執(zhí)行的sql
#簡潔日志 mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 |grep -i -E "Table_map: \`purchasingent\`.\`d_cp_purchasingrequisition" -A 3 # 范圍內(nèi)的所有日志 mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067
簡潔日志結(jié)果
root@680a7c552dab:/tmp# mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 |grep -i -E "Table_map: \`purchasingent\`.\`d_cp_purchasingrequisition" -A 3 #260306 10:21:20 server id 3306 end_log_pos 784198349 CRC32 0xb20d9141 Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833 # at 784198349 #260306 10:21:20 server id 3306 end_log_pos 784198796 CRC32 0x53891233 Write_rows: table id 833 flags: STMT_END_F ### INSERT INTO `purchasingent`.`d_cp_purchasingrequisition` -- #260306 10:21:20 server id 3306 end_log_pos 784201543 CRC32 0x8f63ffb9 Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204 # at 784201543 #260306 10:21:20 server id 3306 end_log_pos 784202455 CRC32 0x7b7b2c71 Write_rows: table id 1204 flags: STMT_END_F ### INSERT INTO `purchasingent`.`d_cp_purchasingrequisitiondtl` -- #260306 10:21:20 server id 3306 end_log_pos 784204702 CRC32 0x48ec57fe Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204 # at 784204702 #260306 10:21:20 server id 3306 end_log_pos 784205112 CRC32 0x626f1884 Write_rows: table id 1204 flags: STMT_END_F ### INSERT INTO `purchasingent`.`d_cp_purchasingrequisitiondtl` -- #260306 10:21:20 server id 3306 end_log_pos 784207099 CRC32 0xcde54035 Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833 # at 784207099 #260306 10:21:20 server id 3306 end_log_pos 784207959 CRC32 0x181420b5 Update_rows: table id 833 flags: STMT_END_F ### UPDATE `purchasingent`.`d_cp_purchasingrequisition` -- #260306 10:21:24 server id 3306 end_log_pos 784287873 CRC32 0x4601c581 Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833 # at 784287873 #260306 10:21:24 server id 3306 end_log_pos 784288733 CRC32 0x961207ea Update_rows: table id 833 flags: STMT_END_F ### UPDATE `purchasingent`.`d_cp_purchasingrequisition` -- #260306 10:21:26 server id 3306 end_log_pos 784312864 CRC32 0x0a5223c0 Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204 # at 784312864 #260306 10:21:26 server id 3306 end_log_pos 784313776 CRC32 0xb78b9ba1 Delete_rows: table id 1204 flags: STMT_END_F ### DELETE FROM `purchasingent`.`d_cp_purchasingrequisitiondtl` -- #260306 10:21:26 server id 3306 end_log_pos 784314192 CRC32 0xcf4c1bd8 Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204 # at 784314192 #260306 10:21:26 server id 3306 end_log_pos 784314602 CRC32 0x7ec98c91 Delete_rows: table id 1204 flags: STMT_END_F ### DELETE FROM `purchasingent`.`d_cp_purchasingrequisitiondtl` -- #260306 10:21:26 server id 3306 end_log_pos 784314985 CRC32 0x79267223 Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833 # at 784314985 #260306 10:21:26 server id 3306 end_log_pos 784315432 CRC32 0x1e3f52d9 Delete_rows: table id 833 flags: STMT_END_F ### DELETE FROM `purchasingent`.`d_cp_purchasingrequisition`
到此這篇關(guān)于MySQL的binlog日志獲取的文章就介紹到這了,更多相關(guān)MySQL binlog日志獲取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決maven打包缺少依賴class xxx for user defined&
在使用自定義函數(shù)時(shí)因依賴缺失導(dǎo)致報(bào)錯,通過定位Maven打包配置發(fā)現(xiàn)缺少依賴包,解決方法是在pom.xml中添加maven-shade-plugin插件,實(shí)現(xiàn)依賴打包和類隔離,成功解決依賴加載問題2025-09-09
windows版本下mysql的安裝啟動和基礎(chǔ)配置圖文教程詳解
本文通過圖文并茂的形式給大家介紹了windows版本下mysql的安裝啟動和基礎(chǔ)配置圖文教程,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理
這篇文章主要介紹了MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-08-08
SQL中實(shí)現(xiàn)SPLIT函數(shù)幾種方法總結(jié)(必看篇)
下面小編就為大家?guī)硪黄猄QL中實(shí)現(xiàn)SPLIT函數(shù)幾種方法總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
MySQL進(jìn)行監(jiān)控配置的詳細(xì)指南
這篇文章主要和大家分享一個(gè)完整的 MySQL 監(jiān)控配置實(shí)戰(zhàn)方案,涵蓋監(jiān)控工具安裝,核心指標(biāo)采集,可視化展示,告警配置等內(nèi)容,需要的可以了解下2025-06-06

