MySQL mysqlbinlog解析出的SQL語句被註釋是怎麼回事

来源:https://www.cnblogs.com/kerrycode/archive/2018/07/16/9315949.html
-Advertisement-
Play Games

MySQL mysqlbinlog解析出的SQL語句被註釋是怎麼回事 一網友反饋使用mysqlbinlog解析出的二進位日誌中的內容中,有些SQL語句有#註釋的情況,這個是怎麼回事呢?我們通過實驗來瞭解一下具體細節情況,如下所示,實驗環境為5.6.20-enterprise-commercial-a... ...


MySQL mysqlbinlog解析出的SQL語句被註釋是怎麼回事

 

一網友反饋使用mysqlbinlog解析出的二進位日誌中的內容中,有些SQL語句有#註釋的情況,這個是怎麼回事呢?我們通過實驗來瞭解一下具體細節情況,如下所示,實驗環境為5.6.20-enterprise-commercial-advanced-log

 

 

# whereis mysqlbinlog

mysqlbinlog: /usr/bin/mysqlbinlog /usr/share/man/man1/mysqlbinlog.1.gz

 

我們先在參數文件my.cnf裡面設置binlog_format=ROW ,然後重啟一下MySQL服務

 

 

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| DB-Server-bin.000005 |      512 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> 
 
 
 
mysql> drop table kkk;
Query OK, 0 rows affected (0.01 sec)
 
mysql> create table kkk (id int ,name varchar(32));
Query OK, 0 rows affected (0.02 sec)
 
mysql> insert into kkk
    -> select 100, 'name' union all
    -> select 200, 'kerry' union all
    -> select 300, 'k3';
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> 

 

預設情況下只能看到一些經過base-64編碼的信息,如下所示:

 

[root@DB-Server ~]# /usr/bin/mysqlbinlog  /data/mysql/DB-Server-bin.000005

 

 

 

use `MyDB`/*!*/;
SET TIMESTAMP=1530288296/*!*/;
DROP TABLE `kkk` /* generated by server */
/*!*/;
# at 628
#180629 12:05:14 server id 1  end_log_pos 745 CRC32 0xc6037a3f  Query   thread_id=3     exec_time=0     error_code=0
SET TIMESTAMP=1530288314/*!*/;
create table kkk (id int ,name varchar(32))
/*!*/;
# at 745
#180629 12:06:07 server id 1  end_log_pos 817 CRC32 0x74fd4efb  Query   thread_id=3     exec_time=0     error_code=0
SET TIMESTAMP=1530288367/*!*/;
BEGIN
/*!*/;
# at 817
#180629 12:06:07 server id 1  end_log_pos 866 CRC32 0xfb1391dd  Table_map: `MyDB`.`kkk` mapped to number 73
# at 866
#180629 12:06:07 server id 1  end_log_pos 930 CRC32 0xecb4e812  Write_rows: table id 73 flags: STMT_END_F
 
BINLOG '
71g2WxMBAAAAMQAAAGIDAAAAAEkAAAAAAAEABE15REIAA2trawACAw8CYAAD3ZET+w==
71g2Wx4BAAAAQAAAAKIDAAAAAEkAAAAAAAEAAgAC//xkAAAABG5hbWX8yAAAAAVrZXJyefwsAQAA
AmszEui07A==
'/*!*/;
# at 930
#180629 12:06:07 server id 1  end_log_pos 961 CRC32 0x7ca988e3  Xid = 37
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

mysqlbinlog有一個參數--verbose(或-v),將自動生成帶註釋的SQL語句(在行事件中重構偽SQL語句),其實這個並非原始SQL語句,而是偽SQL,如果使用這個參數兩次(如-v -v),則輸出列的描述信息,會生成欄位的類型、長度、是否為null等屬性信息:

 

-v, --verbose       Reconstruct pseudo-SQL statements out of row events. -v  -v adds comments on column data types.

 

[root@DB-Server ~]# /usr/bin/mysqlbinlog -v /data/mysql/DB-Server-bin.000005

 

clip_image001

 

如上所示,其實這裡的SQL語句不是原始SQL語句,那麼能否看到原始SQL語句呢?答案是可以,但是必須設置系統變數binlog_rows_query_log_events

 

mysql> show variables like 'binlog_rows_query_log_events';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| binlog_rows_query_log_events | OFF   |
+------------------------------+-------+
1 row in set (0.00 sec)
 
mysql> set binlog_rows_query_log_events=1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
 
mysql>  show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| DB-Server-bin.000026 |      120 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql>
mysql> insert into kkk select 600, 'k600';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

 

[root@DB-Server ~]# /usr/bin/mysqlbinlog  --base64-output=DECODE-ROWS  -v -v /data/mysql/DB-Server-bin.000026

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 分配源地址、目的地址 函數裡面是源和目的的物理地址,函數返回的是源和目的的虛擬地址。 2. 源和目的的記憶體釋放 3. 和硬體打交道用到的是物理地址,比如把源和目的地址告訴DMA寄存器 4. 調用內核函數使用的一般是虛擬地址 完整程式見https://www.cnblogs.com/zhu-g5 ...
  • 學習目標: U-boot屬於兩個階段的Bootloader,第一階段的文件為cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S,前者是平臺相關的,後者是開發板相關的。U-boot的第一階段主要的任務是一些系統的初始化工作,從大的方面可以分為以下幾個部 ...
  • 閱讀本文需要安裝JDK 一 ActiveMQ簡介 activemq是用java語言編寫的一款開源消息匯流排 activemq是apache出品 activemq消息的傳遞有兩種類型 一種是點對點(即一個生產者和一個消費者一一對應) 另一種是發佈|訂閱模式(即一個生產者產生消息併發送後 可以由多個消費者 ...
  • 1. 基本概念: 扇區(Sectors):任何塊設備硬體對數據處理的基本單位。通常,1個扇區的大小為512byte。(對設備而言) 塊 (Blocks):由Linux制定對內核或文件系統等數據處理的基本單位。通常,1個塊由1個或多個扇區組成。(對Linux操作系統而言) 段(Segments):由若 ...
  • 掛載鏡像CentOS-6.6-x86_64-bin-DVD1.iso ...
  • 修改hostname 免密碼登錄 ...
  • MySQL基本簡單操作 先進入 容器。 [root@promote ~] docker exec it mysql /bin/bash root@30d60b852cf5:/ mysql uroot p000000 mysql: [Warning] Using a password on the c ...
  • 寫在前面 本篇是赤果果的產品介紹文章,同時也是向使用資料庫的戰友們表達一下我們是怎樣一步一步打磨產品,又有什麼樣的遠景、動力讓我們一直走下去.... 八年資料庫之路的感悟 這篇文章最後所提到的資料庫管理產品,又經過兩年的不懈努力,一群帶有熱情的老技術打磨,現在3.0版本已經成功上線,並有將近500家 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...