Mysql二進制日誌binlog

Binlog是mysql的二進制日誌, 它的主要目的是基於數據重放機制最大可能的恢復數據庫的更新,由於二進制日誌包含數據庫備份後進行的全部更新mysql

Mysql的主從複製特性也依賴於此實現。sql

Binlog的啓動只增長 1% 的mysql負載, 因此不會成爲瓶頸。數據庫

Mysql在數據操做成功後將按照逐LOG_EVENT遞增的形式追加一條binlog。vim

 

Binlog配置啓用, vim my.cnf

log_bin = /var/log/mysql-bin.log

## 可選配置
binlog_format = MIXED  #默認statement, 推薦mixed
expire_logs_days = 7
max_binlog_size = 100m

 

 

Binlog三種格式:

1 基於語句 statementpost

    記錄數據變化的sql語句。通常日誌量較小,可是語句執行的可靠性較低。spa

2 基於行 row日誌

    記錄被修改的數據行。數據細節清晰可靠,但通常日誌量較大。code

3 混合模式mixedorm

    以上兩種格式的合併。索引

 

Binlog查看:

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恢復mysql的更新:

若是數據庫被各類緣由誤刪, 則咱們能夠結合 binlog上次數據庫的備份 來恢復

#先導入備份的數據庫,而後執行如下命令
#注意:若是是從上次備份來恢復, 則 mysqlbinlog 還需指定上次備份的時間 --start-date
mysqlbinlog -d DatabaseName binlog-file|mysql -u user -p
相關文章
相關標籤/搜索