成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

解析MySQL binlog

瀏覽:149日期:2023-10-01 18:46:57
目錄一、binlog簡介二、binlog相關(guān)參數(shù)三、解析binlog內(nèi)容四、總結(jié)一、binlog簡介

binlog即binary log,二進(jìn)制日志文件。它記錄了數(shù)據(jù)庫所有執(zhí)行的DDL和DML語句(除了數(shù)據(jù)查詢語句select、show等),以事件形式記錄并保存在二進(jìn)制文件中。

binlog主要有兩個(gè)應(yīng)用場景,一是用于復(fù)制,master把它的二進(jìn)制日志傳遞給slaves來達(dá)到master-slave數(shù)據(jù)一致的目的。二是用于數(shù)據(jù)恢復(fù),例如還原備份后,可以重新執(zhí)行備份后新產(chǎn)生的binlog,使得數(shù)據(jù)庫保持最新狀態(tài)。除去這兩個(gè)主要用途外,binlog可以用于異構(gòu)系統(tǒng)之間數(shù)據(jù)的交互,binlog完整保存了一條記錄的前項(xiàng)和后項(xiàng)記錄,可以用DTS服務(wù),將MySQL數(shù)據(jù)以準(zhǔn)實(shí)時(shí)的方式抽取到底層數(shù)據(jù)平臺(tái),比如HBase、Hive、Spark等,打通OLTP和OLAP。

binlog日志可以選擇三種模式,分別是 STATEMENT、 ROW、 MIXED,下面簡單介紹下這三種模式:

STATEMENT:基于SQL語句的復(fù)制,每一條會(huì)修改數(shù)據(jù)的sql語句會(huì)記錄到binlog中。該模式下產(chǎn)生的binlog日志量會(huì)比較少,但可能導(dǎo)致主從數(shù)據(jù)不一致。 ROW:基于行的復(fù)制,不記錄每一條具體執(zhí)行的SQL語句,僅需記錄哪條數(shù)據(jù)被修改了,以及修改前后的樣子。該模式下產(chǎn)生的binlog日志量會(huì)比較大,但優(yōu)點(diǎn)是會(huì)非常清楚的記錄下每一行數(shù)據(jù)修改的細(xì)節(jié),主從復(fù)制不會(huì)出錯(cuò)。 Mixed:混合模式復(fù)制,以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對于STATEMENT模式無法復(fù)制的操作使用ROW模式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的SQL語句選擇日志保存方式。

binlog模式在MySQL 5.7.7之前,默認(rèn)為 STATEMENT,在之后的版本中,默認(rèn)為ROW。這里建議采用ROW模式,因?yàn)镽OW模式更安全,可以清楚記錄每行數(shù)據(jù)修改的細(xì)節(jié)。

二、binlog相關(guān)參數(shù)

binlog默認(rèn)情況下是不開啟的,不過一般情況下,初始化的時(shí)候建議在配置文件中增加log-bin參數(shù)來開啟binlog。

# 配置文件中增加log-bin配置[mysqld]log-bin = binlog# 不指定路徑默認(rèn)在data目錄下,也可以指定路徑[mysqld]log-bin = /data/mysql/logs/binlog# 查看數(shù)據(jù)庫是否開啟了binlogshow variables like ’log_bin%’;

開啟binlog后,還需注意一些與binlog相關(guān)的參數(shù),下面簡單介紹下相關(guān)參數(shù):

binlog_format設(shè)置binlog模式,建議設(shè)為ROW。

binlog_do_db此參數(shù)表示只記錄指定數(shù)據(jù)庫的二進(jìn)制日志,默認(rèn)全部記錄,一般情況下不建議更改。

binlog_ignore_db此參數(shù)表示不記錄指定的數(shù)據(jù)庫的二進(jìn)制日志,同上,一般不顯式指定。

expire_logs_days此參數(shù)控制二進(jìn)制日志文件保留天數(shù),默認(rèn)值為0,表示不自動(dòng)刪除,可設(shè)置為0~99。可根據(jù)實(shí)際情況設(shè)置,比如保留15天或30天。MySQL8.0版本可用binlog_expire_logs_seconds參數(shù)代替。

max_binlog_size控制單個(gè)二進(jìn)制日志大小,當(dāng)前日志文件大小超過此變量時(shí),執(zhí)行切換動(dòng)作。此參數(shù)的最大和默認(rèn)值是1GB,該設(shè)置并不能嚴(yán)格控制Binlog的大小,尤其是Binlog比較靠近最大值而又遇到一個(gè)比較大事務(wù)時(shí),為了保證事務(wù)的完整性,不可能做切換日志的動(dòng)作,只能將該事務(wù)的所有SQL都記錄進(jìn)當(dāng)前日志,直到事務(wù)結(jié)束。一般情況下可采取默認(rèn)值。

log_bin_trust_function_creators當(dāng)二進(jìn)制日志啟用后,此參數(shù)就會(huì)啟用。它控制是否可以信任存儲(chǔ)函數(shù)創(chuàng)建者,不會(huì)創(chuàng)建寫入二進(jìn)制日志引起不安全事件的存儲(chǔ)函數(shù)。如果設(shè)置為0(默認(rèn)值),用戶不得創(chuàng)建或修改存儲(chǔ)函數(shù),除非它們具有除CREATE ROUTINE或ALTER ROUTINE特權(quán)之外的SUPER權(quán)限。建議設(shè)置為1。

sync_binlog控制MySQL服務(wù)端將二進(jìn)制日志同步到磁盤的頻率,默認(rèn)值為1。設(shè)置為0,表示MySQL不控制binlog的刷新,由文件系統(tǒng)自己控制它的緩存的刷新;設(shè)置為1,表示每次事務(wù)提交,MySQL都會(huì)把binlog刷下去,這是最安全的設(shè)置,但由于磁盤寫入次數(shù)增加,可能會(huì)對性能產(chǎn)生負(fù)面影響;設(shè)置為n,其中n為0或1以外的值,在進(jìn)行n次事務(wù)提交以后,Mysql將執(zhí)行一次fsync之類的磁盤同步指令,將Binlog文件緩存刷新到磁盤。推薦設(shè)置為1,出于性能考慮也可酌情調(diào)整。

關(guān)于binlog操作與管理相關(guān)的SQL也有很多,下面介紹下部分常用的語句:

解析MySQL binlog

三、解析binlog內(nèi)容

前面說過,所有對數(shù)據(jù)庫的修改都會(huì)記錄在binglog中。但binlog是二進(jìn)制文件,無法直接查看,想要更直觀的觀測它就要借助mysqlbinlog命令工具了,下面的內(nèi)容主要介紹如何使用mysqlbinlog來解析binlog日志內(nèi)容。

為了故事的順利發(fā)展,我們首先切換下binlog,然后創(chuàng)建測試庫、測試表,執(zhí)行插入數(shù)據(jù),更新數(shù)據(jù)。這些前置操作暫不展示,下面我們來看下如何解析并查看生成的binlog內(nèi)容:

# 本次解析基于MySQL8.0版本,實(shí)例已開啟gtid,模式為ROW[root@centos logs]# mysqlbinlog --no-defaults --base64-output=decode-rows -vv binlog.000013/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;......#200708 16:52:09 server id 1003306 end_log_pos 1049 CRC32 0xbcf3de39 Query thread_id=85 exec_time=0 error_code=0 Xid = 1514use `bindb`/*!*/;SET TIMESTAMP=1594198329/*!*/;SET @@session.explicit_defaults_for_timestamp=1/*!*/;/*!80013 SET @@session.sql_require_primary_key=0*//*!*/;CREATE TABLE `bin_tb` ( `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ’自增主鍵’, `stu_id` int(11) NOT NULL COMMENT ’學(xué)號(hào)’, `stu_name` varchar(20) DEFAULT NULL COMMENT ’學(xué)生姓名’, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ’創(chuàng)建時(shí)間’, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ’修改時(shí)間’, PRIMARY KEY (`increment_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’測試binlog’/*!*/;# at 1049#200708 16:52:45 server id 1003306 end_log_pos 1128 CRC32 0xf19ea0a9 GTID last_committed=2sequence_number=3 rbr_only=yes original_committed_timestamp=1594198365741300 immediate_commit_timestamp=1594198365741300transaction_length=468/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;# original_commit_timestamp=1594198365741300 (2020-07-08 16:52:45.741300 CST)# immediate_commit_timestamp=1594198365741300 (2020-07-08 16:52:45.741300 CST)/*!80001 SET @@session.original_commit_timestamp=1594198365741300*//*!*/;/*!80014 SET @@session.original_server_version=80019*//*!*/;/*!80014 SET @@session.immediate_server_version=80019*//*!*/;SET @@SESSION.GTID_NEXT= ’0032d819-2d32-11ea-91b5-5254002ae61f:24883’/*!*/;# at 1128#200708 16:52:45 server id 1003306 end_log_pos 1204 CRC32 0x5b4b03db Query thread_id=85 exec_time=0 error_code=0SET TIMESTAMP=1594198365/*!*/;BEGIN/*!*/;# at 1204#200708 16:52:45 server id 1003306 end_log_pos 1268 CRC32 0xd4755d50 Table_map: `bindb`.`bin_tb` mapped to number 139# at 1268#200708 16:52:45 server id 1003306 end_log_pos 1486 CRC32 0x274cf734 Write_rows: table id 139 flags: STMT_END_F### INSERT INTO `bindb`.`bin_tb`### SET### @1=1 /* INT meta=0 nullable=0 is_null=0 */### @2=1001 /* INT meta=0 nullable=0 is_null=0 */### @3=’from1’ /* VARSTRING(60) meta=60 nullable=1 is_null=0 */### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### INSERT INTO `bindb`.`bin_tb`### SET### @1=2 /* INT meta=0 nullable=0 is_null=0 */### @2=1002 /* INT meta=0 nullable=0 is_null=0 */### @3=’dfsfd’ /* VARSTRING(60) meta=60 nullable=1 is_null=0 */### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */...# at 1486#200708 16:52:45 server id 1003306 end_log_pos 1517 CRC32 0x0437e777 Xid = 1515COMMIT/*!*/;...# at 1596#200708 16:54:35 server id 1003306 end_log_pos 1681 CRC32 0x111539b6 Query thread_id=85 exec_time=0 error_code=0SET TIMESTAMP=1594198475/*!*/;BEGIN/*!*/;# at 1681#200708 16:54:35 server id 1003306 end_log_pos 1745 CRC32 0x6f0664ee Table_map: `bindb`.`bin_tb` mapped to number 139# at 1745#200708 16:54:35 server id 1003306 end_log_pos 1939 CRC32 0xfafe7ae8 Update_rows: table id 139 flags: STMT_END_F### UPDATE `bindb`.`bin_tb`### WHERE### @1=5 /* INT meta=0 nullable=0 is_null=0 */### @2=1005 /* INT meta=0 nullable=0 is_null=0 */### @3=’dsfsdg’ /* VARSTRING(60) meta=60 nullable=1 is_null=0 */### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### SET### @1=5 /* INT meta=0 nullable=0 is_null=0 */### @2=1005 /* INT meta=0 nullable=0 is_null=0 */### @3=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### @5=1594198475 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### UPDATE `bindb`.`bin_tb`### WHERE### @1=6 /* INT meta=0 nullable=0 is_null=0 */### @2=1006 /* INT meta=0 nullable=0 is_null=0 */### @3=’fgd’ /* VARSTRING(60) meta=60 nullable=1 is_null=0 */### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### SET### @1=6 /* INT meta=0 nullable=0 is_null=0 */### @2=1006 /* INT meta=0 nullable=0 is_null=0 */### @3=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */### @5=1594198475 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */...# at 1939#200708 16:54:35 server id 1003306 end_log_pos 1970 CRC32 0x632a82b7 Xid = 1516COMMIT/*!*/;SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;DELIMITER ;# End of log file/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;# 可以看出,binlog中詳細(xì)記錄了每條sql執(zhí)行產(chǎn)生的變化,并且包括執(zhí)行時(shí)間、pos位點(diǎn)、server_id等系統(tǒng)值。

關(guān)于mysqlbinlog工具的使用技巧還有很多,例如只解析對某個(gè)庫的操作或者某個(gè)時(shí)間段內(nèi)的操作等。簡單分享幾個(gè)常用的語句,更多操作可以參考官方文檔。

mysqlbinlog --no-defaults --base64-output=decode-rows -vv binlog.000013 > /tmp/bin13.sql將解析到的SQL導(dǎo)入文件中

mysqlbinlog --no-defaults --base64-output=decode-rows -vv --database=testdb binlog.000013只解析某個(gè)庫的操作

mysqlbinlog --no-defaults --base64-output=decode-rows -vv --start-datetime=“2020-01-11 01:00:00” --stop-datetime=“2020-01-11 23:59:00” binlog.000008解析指定時(shí)間段內(nèi)的操作

mysqlbinlog --no-defaults --base64-output=decode-rows -vv --start-position=204136360 --stop-position=204136499 binlog.000008解析指定pos位點(diǎn)內(nèi)的操作

mysqlbinlog --no-defaults --start-position=204136360 --stop-position=204136499 binlog.000008 | mysql -uroot -pxxxx testdb在指定庫中恢復(fù)指定位點(diǎn)間的操作

四、總結(jié)

不知不覺寫的挺長了,本文講述了各類binlog相關(guān)知識(shí)點(diǎn),希望你讀完會(huì)對binlog有更深的認(rèn)識(shí)。其實(shí)最重要的還是實(shí)踐,只有多學(xué)多用才能更好的掌握。這么硬核的知識(shí),希望大家用到的時(shí)候可以拿來讀讀,歡迎各位轉(zhuǎn)發(fā)分享,讓更多人看到。

以上就是解析MySQL binlog的詳細(xì)內(nèi)容,更多關(guān)于MySQL binlog的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品美女一区二区三区| 亚洲精品综合在线| 国产欧美日本一区二区三区| 久久国产尿小便嘘嘘尿| 亚洲日本精品国产第一区| 欧美成人精品高清在线播放| 日韩黄色免费电影| 在线视频免费在线观看一区二区| 久久亚洲二区三区| 国产福利电影一区二区三区| 久久亚洲高清| 亚洲图片欧美一区| aa国产精品| 亚洲欧美一区二区三区国产精品 | 欧美日韩国产三区| 欧美电视剧免费观看| 国产成人a级片| 欧美绝品在线观看成人午夜影视| 免费久久精品视频| 久久亚洲高清| 午夜欧美一区二区三区在线播放| 亚洲精品美女久久7777777| 国产欧美日韩在线视频| 99r精品视频| 欧美精品一区在线观看| 成人一区二区三区视频在线观看 | 国产精品嫩草影院com| 欧美一区免费视频| 26uuu亚洲综合色| 波多野结衣91| 日韩精品一区二区三区四区视频 | 国产精品久久久久久久久搜平片 | 久久99国产精品免费| 日本久久电影网| 日韩黄色小视频| 在线观看一区不卡| 久久99精品国产麻豆不卡| 欧美日韩在线直播| 国产呦精品一区二区三区网站| 欧美日韩精品欧美日韩精品一综合| 老司机精品视频导航| 欧美老年两性高潮| 精品在线观看视频| 欧美麻豆精品久久久久久| 激情亚洲综合在线| 欧美日韩国产在线观看| 捆绑调教美女网站视频一区| 欧美色综合影院| 国产一区二区三区最好精华液| 欧美日产在线观看| 国产一区二区精品久久99| 欧美绝品在线观看成人午夜影视| 国产自产高清不卡| 91精品啪在线观看国产60岁| 国产成人免费视频精品含羞草妖精| 日韩欧美一区二区三区在线| 99精品国产91久久久久久| 国产日本欧美一区二区| 国内精品久久久久久久果冻传媒 | 狠狠干成人综合网| 亚洲色图色小说| 欧美亚洲一级| 久久精品免费观看| 欧美一区二区成人| 欧美激情性爽国产精品17p| 亚洲六月丁香色婷婷综合久久 | 日本伊人色综合网| 欧美日产在线观看| 国产乱子轮精品视频| 精品人伦一区二区色婷婷| 色综合天天综合狠狠| 尤物视频一区二区| 欧美色综合影院| 99精品欧美一区二区蜜桃免费| 中文字幕在线视频一区| 欧美资源在线| 国产乱人伦偷精品视频不卡 | 精品久久久久一区二区国产| 色综合久久综合网97色综合 | 岛国精品在线播放| 国产精品福利电影一区二区三区四区| av不卡在线看| 精品影视av免费| 国产欧美日韩不卡| 久久久久久久高潮| 国产呦萝稀缺另类资源| 久久影院电视剧免费观看| 亚洲国产一区二区精品专区| 免费一级片91| 日韩精品最新网址| 一区二区三区你懂的| 看电影不卡的网站| 欧美国产一区二区在线观看 | 日韩视频在线永久播放| 欧美激情麻豆| 五月综合激情日本mⅴ| 91精品国产欧美一区二区成人| 国产精品啊啊啊| 久久国产综合精品| 国产精品视频看| 欧美日韩情趣电影| 亚洲免费久久| 丁香天五香天堂综合| 亚洲资源中文字幕| 久久青草欧美一区二区三区| 色婷婷av一区二区三区软件| 欧美特黄一级| 国产精品77777| 亚洲r级在线视频| 精品福利一二区| 日本精品一区二区三区高清 | 成人涩涩免费视频| 日韩高清不卡在线| 中文字幕制服丝袜成人av| 日韩一区二区在线观看视频播放| 国产伦精品一区二区三| 91浏览器打开| 久久精品国产亚洲高清剧情介绍 | 成人激情文学综合网| 尤物视频一区二区| 欧美一级在线观看| 亚洲精品欧洲| 国产在线日韩欧美| 亚洲欧美日韩电影| 制服.丝袜.亚洲.中文.综合| 99av国产精品欲麻豆| 国内成人自拍视频| 国产精品网站在线播放| 欧美无人高清视频在线观看| 欧美日韩一区综合| 免费成人在线播放| 欧美一区二区三区免费| 午夜宅男欧美| 99在线精品一区二区三区| 亚洲一区在线视频| 制服丝袜亚洲色图| 亚洲精品美女久久7777777| 国产精品系列在线播放| 综合自拍亚洲综合图不卡区| 精品国产伦一区二区三区观看方式 | 精品一区二区精品| 国产精品天干天干在观线| 欧洲一区在线观看| 国产精品地址| 国产又粗又猛又爽又黄91精品| 亚洲日本韩国一区| 欧美日韩一区二区欧美激情| 国产日韩一区二区| 成人精品电影在线观看| 爽好久久久欧美精品| 中文在线资源观看网站视频免费不卡| 欧美视频中文一区二区三区在线观看| 国内精品久久久久久久果冻传媒 | 久久久精品性| 91网站视频在线观看| 麻豆91精品视频| 国产精品美女久久久久久久久 | 玉足女爽爽91| www国产成人免费观看视频 深夜成人网| 性8sex亚洲区入口| 欧美久久久久| 国产成人免费视频精品含羞草妖精 | 欧美酷刑日本凌虐凌虐| 国产手机视频一区二区| 91在线播放网址| 男男视频亚洲欧美| 亚洲美女淫视频| 精品1区2区在线观看| 欧美电视剧在线看免费| 在线免费亚洲电影| 国产精品久久久久久久久婷婷| 亚洲欧美影院| 成人激情开心网| 香蕉久久一区二区不卡无毒影院| 国产午夜精品一区二区三区四区| 26uuu国产电影一区二区| 欧美三级电影在线观看| 亚洲一区自拍| 红桃视频欧美| 波多野结衣91| 国内精品在线播放| 亚洲午夜一区二区| 亚洲午夜国产一区99re久久| 国产精品免费人成网站| 久久久久久久久岛国免费| 欧美一区日韩一区| 欧美日韩视频不卡| 色噜噜狠狠色综合欧洲selulu| 在线综合亚洲| 午夜精品一区二区三区四区| 成人高清在线视频| 日本美女一区二区三区视频| 日韩专区中文字幕一区二区| 亚洲精品乱码久久久久久黑人| 日本一区二区三区四区在线视频| 欧美一区二区三区视频在线| 欧美日韩不卡一区| 欧美少妇一区二区| 日韩三级电影网址| 欧美一区二区三区的|