Binlog是一系列日志文件,他們包含的內(nèi)容是Mysql數(shù)據(jù)內(nèi)容的改變。如果想開啟binlog功能,需要在啟動時帶上--log-bin參數(shù)。
binlog是從Mysql3.23.14版本開始的。它包含所有更新數(shù)據(jù)的sql語句。它還包含可能更新數(shù)據(jù)的語句(比如,刪除不存在的數(shù)據(jù)行的語句),除非日志的記錄是以基于行的。sql語句是以描述修改的事件形式存儲的。binlog也包含每個語句的執(zhí)行時間。
binlog還包含其他的一些源數(shù)據(jù),比如:
- 語句執(zhí)行時,服務(wù)器的狀態(tài)信息,以便用于正確的重新成功執(zhí)行語句
- 錯誤碼
- 為了維持binlog文件的連續(xù)性所需要的元數(shù)據(jù)(比如,rotate事件)
binlog文件是服務(wù)器在執(zhí)行sql語句過程中整體狀態(tài)的情況跟蹤。它包含的事件描述了狀態(tài)的變化。更精確的是,binlog事件描述的事件可以被用來重現(xiàn)服務(wù)器當(dāng)時的狀態(tài)改變。
binlog文件有兩個重要的目的:
- 為了主從復(fù)制,binlog文件是master服務(wù)器記錄的,會被發(fā)送給slave服務(wù)器。很多binlog的格式細節(jié)和處理是用于這個目的的。master服務(wù)器發(fā)送binlog文件中的事件給slave服務(wù)器,然后slave服務(wù)器執(zhí)行這些事件,最終達到的目標就是保證slave服務(wù)器的數(shù)據(jù)變化與master一致。slave服務(wù)器在執(zhí)行這些事件之前,會把這些事件存儲在本地的relay log中。relay log的格式與binlog一樣。
- 某些數(shù)據(jù)恢復(fù)操作需要使用binlog。在備份文件恢復(fù)后,binlog中的事件會重新執(zhí)行。這些事件會讓數(shù)據(jù)庫的數(shù)據(jù)回到備份時間點。
目前有兩種類型的binlog:
- 基于語句的:包含sql語句的事件(insert、update、delete)
- 基于行的:描述每一行的數(shù)據(jù)變化的事件
混合的日志默認使用的是基于語句的記錄方式,在必要時會切換到基于行的記錄方式?;谛械挠涗浄绞綇腗ysql 5.1版本開始支持。
mysqlbinlog工具可以把binlog或者relay log日志以可讀的方式打印出來。