二進制日志

簡介

binlog是mysql server層存儲的二進制日志肛根,主要用于記錄更新操作:

  • 所有數(shù)據(jù)庫表結構變更DDL(例如create摔认、alter顽照、drop)狼荞;
  • 表數(shù)據(jù)修改DML(insert苞也、update、delete)粘秆。

日志類型

binlog日志包含:

  • 二進制日志索引文件(文件后綴名=.index)如迟,是個普通文件,文件內(nèi)容如下:
    image
  • 二進制日志文件(文件后綴名=.00000*),用于記錄更新操作殷勘。

寫入流程

當事務表存儲引擎時此再,所有未提交的二進制日志會被記錄到一個緩存(通過binlog_cache_size配置緩存大小,默認32K)中去玲销,等待事務提交時直接將緩存中的二進制日志刷新到磁盤二進制文件输拇。

binlog_cache_size是基于會話的,因此設置的大小一定要消息贤斜〔叻停可以通過binlog_cache_use(寫入緩存的次數(shù))、binlog_cache_disk_use(寫入臨時文件的次數(shù))瘩绒,判斷當前的設置是否合適猴抹,太小會寫到臨時文件影響性能,太大會造成內(nèi)存浪費锁荔。

默認的情況下蟀给,二進制日志并不是在每次寫的時候都刷新到磁盤中。因此阳堕,當數(shù)據(jù)庫發(fā)生宕機的時候跋理,就會可能造成數(shù)據(jù)的丟失,這會給恢復和復制帶來問題恬总。因此可以呀通過sync_binlog=N(默認是0)設置寫入N次就同步一次到磁盤前普。

不過即使將sync_binlog設置成1,也會出現(xiàn)問題壹堰。當使用InnoDB存儲引擎時汁政,在一個事務發(fā)出COMMIT操作之前,先將二進制日志寫入磁盤缀旁,但如果此時提交動作還沒有在InnoDB存儲redo log寫入记劈,并且此時數(shù)據(jù)庫發(fā)生了宕機。下次啟動時并巍,該事務會被回滾掉目木,但是二進制日志已經(jīng)記錄了該信息,就會造成復制時數(shù)據(jù)不一致懊渡。因此刽射,需要保證binlog與redo log分布式事務的一致性,可以使用XA事務保證一致性剃执,通過innodb_support_xa=ON(默認開啟)開啟誓禁。

日志格式

binlog格式有三種:row,statement肾档,mixed摹恰。

可通過show variables like '%binlog_format%' 查看當前binlog日志格式辫继。

  • row:非常清晰的記錄下每行數(shù)據(jù)的修改細節(jié),不需要記錄上下文相關信息俗慈。

    • 優(yōu)點:不會出現(xiàn)某些特定情況下的存儲過程姑宽、函數(shù)、觸發(fā)器的調用和觸發(fā)無法被正確復制的問題闺阱。
    • 缺點:會產(chǎn)生大量的日志炮车,尤其是alter table會記錄所有行的變更細節(jié)。
  • statement:記錄更新操作的sql語句酣溃。

    • 優(yōu)點:相對row格式瘦穆,減少了日志,節(jié)約IO赊豌,提高性能扛或。
    • 缺點:為了保證sql語句能在slave上正確執(zhí)行,必須記錄上下文信息亿絮,以保證所有語句能在slave得到和在master端執(zhí)行時候相同的結果告喊;另外麸拄,主從復制時派昧,存在部分函數(shù)(如sleep)及存儲過程在slave上會出現(xiàn)與master結果不一致的情況。
  • mixed:混合格式拢切,實際上是row與statement的結合蒂萎。mysql會根據(jù)執(zhí)行的每一條具體的sql語句來區(qū)分對待記錄的日志形式,也就是在statement和row之間選擇一種淮椰。

    新版本的mysql對row格式也被做了優(yōu)化五慈,并不是所有的修改都會以row格式來記錄,像遇到表結構變更的時候就會以statement格式來記錄主穗,如果sql語句確實就是update或者delete等修改數(shù)據(jù)的語句泻拦,那么還是會記錄所有行的變更;因此忽媒,現(xiàn)在一般使用row格式即可争拐。

對于row格式來說,mysql5.6新增binlog_row_image減少了DML操作產(chǎn)生的日志量:

  • 舊版邏輯:當表含有blob或者text類型的字段晦雨,update的時候架曹,即使不更新這些字段,也會被記錄到binlog中闹瞧,會導致日志龐大绑雄。
  • 5.6新版邏輯:binlog_row_image提供full、minimal奥邮、nolob三個可選值万牺。
    • full:記錄所有字段信息罗珍,跟舊版一樣。
    • minimal:只記錄被修改的列信息杏愤。
    • nolob:記錄除了blob和text以外的所有字段靡砌。

相關命令及配置

開啟binlog

首先查看mysql binlog配置情況 show variables like '%log_bin%';

image

可以看到log_bin 狀態(tài)是關閉 ,找到my.cnf配置文件,配置log-bin=binlog(binlog存放路徑)珊楼。

查看binlog當前格式

show variables like '%binlog_format%';

image

設置binlog格式binlog_format=row

查看所有binlog日志列表

show master logs;

image

最新binlog日志

show master status;

image

查看某個binlog日志內(nèi)容

show binlog events in 'binlog.000003' from 3 limit 2;

意思是:從pos=3的起始點開始通殃,查看10條,日志名=binlog.000003的日志內(nèi)容
image

另外一種方式是使用mysqlbinlog工具厕宗,可以看到更加詳細的信息:

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/binlog.000003

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末画舌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子已慢,更是在濱河造成了極大的恐慌曲聂,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佑惠,死亡現(xiàn)場離奇詭異朋腋,居然都是意外死亡,警方通過查閱死者的電腦和手機膜楷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門旭咽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赌厅,你說我怎么就攤上這事穷绵。” “怎么了特愿?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵仲墨,是天一觀的道長。 經(jīng)常有香客問我揍障,道長目养,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任毒嫡,我火速辦了婚禮癌蚁,結果婚禮上,老公的妹妹穿的比我還像新娘审胚。我一直安慰自己匈勋,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布膳叨。 她就那樣靜靜地躺著洽洁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菲嘴。 梳的紋絲不亂的頭發(fā)上饿自,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天汰翠,我揣著相機與錄音,去河邊找鬼昭雌。 笑死复唤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的烛卧。 我是一名探鬼主播佛纫,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼总放!你這毒婦竟也來了呈宇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤局雄,失蹤者是張志新(化名)和其女友劉穎甥啄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炬搭,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蜈漓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宫盔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片融虽。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖飘言,靈堂內(nèi)的尸體忽然破棺而出衣形,到底是詐尸還是另有隱情驼侠,我是刑警寧澤姿鸿,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站倒源,受9級特大地震影響苛预,放射性物質發(fā)生泄漏。R本人自食惡果不足惜笋熬,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一热某、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胳螟,春花似錦昔馋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘉竟,卻和暖如春邦危,著一層夾襖步出監(jiān)牢的瞬間洋侨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工倦蚪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留希坚,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓陵且,卻偏偏與公主長得像裁僧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慕购,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 一锅知、二進制日志及其作用 定義: MySQL的二進制日志記錄的是所有使mysql數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變更的操作信息(事件...
    冷若秋楓閱讀 1,523評論 0 3
  • 本文問題 二進制日志格式有幾種,格式不同對復制有什么影響脓钾,不同格式的優(yōu)缺點是什么售睹? 如何控制中繼日志的名稱和大小可训?...
    月飲沙閱讀 979評論 0 0
  • MySQL日志文件系統(tǒng)的組成 錯誤日志:記錄啟動昌妹,停止MySQL時出現(xiàn)的問題。 通用日志:記錄建立的客戶端連接和執(zhí)...
    clickdiff閱讀 496評論 0 1
  • 介紹 binlog,即二進制日志握截,它記錄了數(shù)據(jù)庫上的所有變化飞崖,并以二進制的形式保存在磁盤中;它可以用來查看數(shù)據(jù)庫的...
    阿棟oxo閱讀 159評論 0 0
  • 一.打開主配置文件 添加以下參數(shù) [root@db1 ~]# vim /etc/my.cnf server_id=...
    南南宮問天閱讀 604評論 0 0