Binlog是mysql的二進制日誌, 它的主要目的是基於數據重放機制最大可能的恢復數據庫的更新,由於二進制日誌包含數據庫備份後進行的全部更新。mysql
Mysql的主從複製特性也依賴於此實現。sql
Binlog的啓動只增長 1% 的mysql負載, 因此不會成爲瓶頸。數據庫
Mysql在數據操做成功後將按照逐LOG_EVENT遞增的形式追加一條binlog。vim
log_bin = /var/log/mysql-bin.log ## 可選配置 binlog_format = MIXED #默認statement, 推薦mixed expire_logs_days = 7 max_binlog_size = 100m
1 基於語句 statementpost
記錄數據變化的sql語句。通常日誌量較小,可是語句執行的可靠性較低。spa
2 基於行 row日誌
記錄被修改的數據行。數據細節清晰可靠,但通常日誌量較大。code
3 混合模式mixedorm
以上兩種格式的合併。索引
binlog文件由 索引文件 及 具體日誌 文件構成:
mysql-bin.index #索引文件, 內容爲全部日誌文件名, 一行一個
mysql-bin.000001 #具體日誌文件, 每次mysql服務重啓都會新增一個日誌文件, 序列號增一。
#內容包含了當下mysql服務中, 全部庫的數據變動。
須要注意的是, 因爲binlog是二進制日誌, 因此你直接 cat 或者 vim 去查看編輯日誌文件, 看到的會是亂碼。
因此必須經過以下命令來查看日誌。
. Mysql Shell下查看: show binary logs #查看binlog列表 show master status #查看當前寫入的binlog文件 #(每次服務重啓都會新建一個binlog,具體運行時往最近建立的binlog寫入) show binlog evnets 【in 'log_name'】 #查看指定binlog, 沒有指定則默認第一個。注意有單引號。
. Bash下查看, 更細緻的分析: ##若是binlog格式是行模式的,請加 -vv參數 mysqlbinlog --start-datetime='2015-01-01 00:00:00' --stop-datetime='2015-06-01 01:01:01' 【-d 庫名】 二進制文件 #時間端內查看 mysqlbinlog --start-postion=1 --stop-position=1000 【-d 庫名】 二進制文件 #Event Pos 區間內查看
若是數據庫被各類緣由誤刪, 則咱們能夠結合 binlog 及 上次數據庫的備份 來恢復
#先導入備份的數據庫,而後執行如下命令 #注意:若是是從上次備份來恢復, 則 mysqlbinlog 還需指定上次備份的時間 --start-date mysqlbinlog -d DatabaseName binlog-file|mysql -u user -p