久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何理解binlog的binlog

150次閱讀
沒有評論

共計 6617 個字符,預計需要花費 17 分鐘才能閱讀完成。

行業資訊    
數據庫    
MySQL 數據庫    
如何理解 binlog 的 binlog_rows_query_log_events 和 binlog_row_image 參數

這期內容當中丸趣 TV 小編將會給大家帶來有關如何理解 binlog 的 binlog_rows_query_log_events 和 binlog_row_image 參數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

mysql 5.6.2 引入的兩個參數 binlog_rows_query_log_events 和 binlog_row_image

對于使用 row 格式的 binlog, 個人覺得很有用;

binlog_rows_query_log_events =1
    在 row 模式下.. 開啟該參數, 將把 sql 語句打印到 binlog 日志里面. 默認是 0(off);
    雖然將語句放入了 binlog, 但不會執行這個 sql, 就相當于注釋一樣. 但對于 dba 來說, 在查看 binlog 的時候, 很有用處.
binlog_row_image= minimal
    默認為 full, 在 binlog 為 row 格式下,full 將記錄 update 前后所有字段的值,minimal 時, 只記錄更改字段的值和 where 字段的值,noblob 時, 記錄除了 blob 和 text 的所有字段的值, 如果 update 的 blob 或 text 字段, 也只記錄該字段更改后的值, 更改前的不記錄;

大家都知道 row 格式下的 binlog 增長速度太快, 對存儲空間, 主從傳輸都是一個不小的壓力. 因為每個 event 記錄了所有更改數據前后的值, 不管數據是否有改動都會記錄.binlog_row_image 的引入就大大減少了 binlog 記錄的數據. 在結合 binlog_rows_query_log_events, 對于 dba 日常維護 binlog 是完全沒有壓力的, 而且節省了硬盤空間開銷, 減小 I /O, 減少了主從傳輸壓力;

下面通過舉例說明:

下面就是一個事務在 row 格式下的 binlog 日志, 紅色部分就是 binlog_rows_query_log_events 后的效果; 黃色部分就是 binlog_row_image=full 的結果, 記錄所有字段在更改前后的值;

# at 1134
#161118 17:25:49 server id 3310  end_log_pos 1199 CRC32 0x3d0190ce      GTID    last_committed=1        sequence_number=2
SET @@SESSION.GTID_NEXT= 59194c6e-70db-11e6-b85b-5254002eb131:299 /*!*/;
# at 1199
#161118 17:25:49 server id 3310  end_log_pos 1270 CRC32 0x0bc5f8df      Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1479461149/*!*/;
BEGIN
/*!*/;
# at 1270
#161118 17:25:49 server id 3310  end_log_pos 1332 CRC32 0x7533bf59      Rows_query
# update t11 set col7 = xxx where id =2     ############## 這一行就是啟用了 binlog_rows_query_log_events 后的效果;
# at 1332
#161118 17:25:49 server id 3310  end_log_pos 1396 CRC32 0x75f09d77      Table_map: `tt1`.`t11` mapped to number 137
# at 1396
#161118 17:25:49 server id 3310  end_log_pos 1929 CRC32 0xa6eb390e      Update_rows: table id 137 flags: STMT_END_F
### UPDATE `tt1`.`t11`
### WHERE
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2= xxx /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3= bbbbbbbbbbbbbbbbbbbb /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @4= cccccccccccccccccccc /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @5= dddddddddddddddddddd /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @6= eeeeeeeeeeeeeeeeeeee /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @7= ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
###   @8= gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
### SET
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2= xxx /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3= bbbbbbbbbbbbbbbbbbbb /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @4= cccccccccccccccccccc /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @5= dddddddddddddddddddd /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @6= eeeeeeeeeeeeeeeeeeee /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @7= ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
###   @8= xxx /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
# at 1929
#161118 17:25:49 server id 3310  end_log_pos 1960 CRC32 0x9d147914      Xid = 551
COMMIT/*!*/;

看下面的例子: 黃色部分就是 binlog_row_image= minimal 的日志. 只記錄了更改后的值和 where 值. 跟上面的例子一對比就發現減少了太多記錄;

# at 1960
#161118 17:26:25 server id 3310  end_log_pos 2025 CRC32 0x20921004      GTID    last_committed=2        sequence_number=3
SET @@SESSION.GTID_NEXT= 59194c6e-70db-11e6-b85b-5254002eb131:300 /*!*/;
# at 2025
#161118 17:26:25 server id 3310  end_log_pos 2096 CRC32 0x0c129ffb      Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1479461185/*!*/;
BEGIN
/*!*/;
# at 2096
#161118 17:26:25 server id 3310  end_log_pos 2158 CRC32 0x6a5031d0      Rows_query
# update t11 set col1 = xxx where id =3
# at 2158
#161118 17:26:25 server id 3310  end_log_pos 2222 CRC32 0x34de716f      Table_map: `tt1`.`t11` mapped to number 137
# at 2222
#161118 17:26:25 server id 3310  end_log_pos 2268 CRC32 0x77563057      Update_rows: table id 137 flags: STMT_END_F
### UPDATE `tt1`.`t11`
### WHERE
###   @1=3 /* INT meta=0 nullable=0 is_null=0 */
### SET
###   @2= xxx /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
# at 2268
#161118 17:26:25 server id 3310  end_log_pos 2299 CRC32 0xe9b5eaa7      Xid = 555
COMMIT/*!*/;

下面看看 binlog_row_image=noblob 時的情況, 在 noblob 下, 跟 full 唯一的區別是沒有記錄字段類型為 text 和 blob 的值, 其他的都記錄了. 而且在例子中特意更改了 @8(col7), 這是一個 text 類型的字段, 可以看到, 在 set 前是沒有記錄整個字段的, 只是記錄該值 set 后的值;

# at 3691
#161118 17:27:01 server id 3310  end_log_pos 3756 CRC32 0x59fb0d65      GTID    last_committed=6        sequence_number=7
SET @@SESSION.GTID_NEXT= 59194c6e-70db-11e6-b85b-5254002eb131:304 /*!*/;
# at 3756
#161118 17:27:01 server id 3310  end_log_pos 3827 CRC32 0x9943381e      Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1479461221/*!*/;
BEGIN
/*!*/;
# at 3827
#161118 17:27:01 server id 3310  end_log_pos 3889 CRC32 0xa617db5e      Rows_query
# update t11 set col7 = xxx where id =4
# at 3889
#161118 17:27:01 server id 3310  end_log_pos 3953 CRC32 0x74e30167      Table_map: `tt1`.`t11` mapped to number 137
# at 3953
#161118 17:27:01 server id 3310  end_log_pos 4180 CRC32 0xd92fe8dc      Update_rows: table id 137 flags: STMT_END_F
### UPDATE `tt1`.`t11`
### WHERE
###   @1=4 /* INT meta=0 nullable=0 is_null=0 */
###   @2= xxx /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3= bbbbbbbbbbbbbbbbbbbb /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @4= cccccccccccccccccccc /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @5= dddddddddddddddddddd /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @6= eeeeeeeeeeeeeeeeeeee /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
### SET
###   @1=4 /* INT meta=0 nullable=0 is_null=0 */
###   @2= xxx /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3= bbbbbbbbbbbbbbbbbbbb /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @4= cccccccccccccccccccc /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @5= dddddddddddddddddddd /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @6= eeeeeeeeeeeeeeeeeeee /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @8= xxx /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
# at 4180
#161118 17:27:01 server id 3310  end_log_pos 4211 CRC32 0x87487ec8      Xid = 561
COMMIT/*!*/;
# at 4211

對于 delete 效果也是一樣的, 就不一一舉例了..

BEGIN
/*!*/;
# at 4347
#161118 18:46:03 server id 3310  end_log_pos 4398 CRC32 0xd76dbd23      Rows_query
# delete from t11 where id =2
# at 4398
#161118 18:46:03 server id 3310  end_log_pos 4462 CRC32 0x75656a14      Table_map: `tt1`.`t11` mapped to number 137
# at 4462
#161118 18:46:03 server id 3310  end_log_pos 4590 CRC32 0xafec2072      Delete_rows: table id 137 flags: STMT_END_F
### DELETE FROM `tt1`.`t11`
### WHERE
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2= xxx /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3= bbbbbbbbbbbbbbbbbbbb /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @4= cccccccccccccccccccc /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @5= dddddddddddddddddddd /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @6= eeeeeeeeeeeeeeeeeeee /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
# at 4590
#161118 18:46:03 server id 3310  end_log_pos 4621 CRC32 0x179ae194      Xid = 562
COMMIT/*!*/;

上述就是丸趣 TV 小編為大家分享的如何理解 binlog 的 binlog_rows_query_log_events 和 binlog_row_image 參數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計6617字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 岑溪市| 西宁市| 中阳县| 横峰县| 玛沁县| 德惠市| 洛阳市| 德化县| 沙雅县| 德庆县| 巫溪县| 原阳县| 邢台县| 澄江县| 晋宁县| 六安市| 姜堰市| 吉隆县| 宜兴市| 沅陵县| 桓仁| 高邮市| 泉州市| 昆山市| 烟台市| 镇雄县| 封开县| 漳浦县| 绥芬河市| 巢湖市| 富锦市| 米泉市| 兴安盟| 平定县| 鸡泽县| 卓尼县| 马山县| 辰溪县| 苏尼特左旗| 康定县| 日照市|