5 3 二進位制日誌

2022-07-01 08:57:13 字數 2863 閱讀 9440

二進位制日誌

記錄導致資料改變或潛在導致資料改變的sql語句

記錄已提交的日誌

不依賴於儲存引擎型別

功能:通過「重放」日誌檔案中的事件來生成資料副本

注意:建議二進位制日誌和資料檔案分開存放

二進位制日誌記錄三種格式

基於「語句」記錄:statement,記錄語句,預設模式),日誌量較少

基於「行」記錄:row,記錄資料,日誌量較大,更加安全,建議使用的格式 (mysqlbinlog --base64-output=decode-rows -v log_bin.000003)

混合模式:mixed, 讓系統自行判定該基於哪種方式進行,預設模式

格式配置

show variables like

'binlog_format

';

二進位制日誌檔案的構成

有兩類檔案

1.日誌檔案:mysql|mariadb-bin.檔名字尾,二進位制格式,如: mysql-bin.000001

2.索引檔案:mysql|mariadb-bin.index,文字格式

二進位制日誌相關的伺服器變數

sql_log_bin=on|

off:#是否記錄二進位制日誌,預設on,支援動態修改,系統變數,而非伺服器選項

log-bin

=log-bin

:#指定檔案位置;預設off,表示不啟用二進位制日誌功能,上述兩項都開啟才可以

server-id=1(5.7.3之後要配合此選項使用)

binlog_format

=statement|row|

mixed:#二進位制日誌記錄的格式,預設statement

max_binlog_size

=1073741824

:#單個二進位制日誌檔案的最大體積,到達最大值會自動滾動,預設為1g

#說明:檔案達到上限時的大小未必為指定的精確值

binlog_cache_size

=4m #此變數確定在每次事務中儲存二進位制日誌更改記錄的快取的大小(每次連線)

max_binlog_cache_size

=512m #限制用於快取多事務查詢的位元組大小。

sync_binlog=1

|0:#設定是否啟動二進位制日誌即時同步磁碟功能,預設0,由作業系統負責同步日誌到磁碟

expire_logs_days

=n:#二進位制日誌可以自動刪除的天數。 預設為0,即不自動刪除

sync_binlog:

1.影響binlog對mysql的效能損耗

2.影響mysql中資料的完整性

設定如下:

1.0mysql不做fsync之類的磁碟同步指令重新整理binlog_cache中資訊到磁碟,讓fs來決定什麼時候同步,或者cache滿了同步

2.n n次提交事務之後,mysql將進行一次fsync 刷寫cache到磁碟

分析: 在mysql中系統預設的設定是sync_binlog=0,也就是不做任何強制性的磁碟重新整理指令,這時候的效能是最好的,但是風險也是最大的。因為一旦系統crash,在binlog_cache中的所有binlog資訊都會被丟失

而當設定為「1」的時候,是最安全但是效能損耗最大的設定。因為當設定為1的時候,即使系統crash,也最多丟失binlog_cache中未完成的乙個事務,對實際資料沒有任何實質性影響。

二進位制日誌相關配置

檢視mysql自行管理使用中的二進位制日誌檔案列表,及大小

show logs  

檢視使用中的二進位制日誌檔案

show master status

二進位制日誌事件的格式:

# at 328

#151105

16:31:40 server id 1 end_log_pos 431   query   thread_id=

1exec_time

=0     error_code=

0use `mydb`/*!*/

;set

timestamp

=1446712300/*!

*/;create

table tb1 (id int, name char(30

))/*!*/

;  151105

16:31:40

事件發生的伺服器標識:server id

1事件的結束位置:end_log_pos

431事件的型別:query

事件發生時所在伺服器執行此事件的執行緒的id:thread_id=1

語句的時間戳與將其寫入二進位制檔案中的時間差:exec_time=0

錯誤**:error_code=0

事件內容:

gtid:global

transaction id,mysql5.6以mariadb10以上版本專屬屬性:gtid

清除二進位制日誌:

purge  logs 

purge

binary logs to

'mysql-bin.000003

'; #刪除mysql-

bin.000003之前的日誌

purge

binary logs before '

2017-01-23';

purge

binary logs before '

2017-03-22 09:25:30

';

檢視二進位制日誌事件

mysql> show binlog events in

'mysql_bin.000002

';

mysql 二進位制日誌

如果mysql 伺服器啟用了二進位制日誌,你可以使用mysqlbinlog工具來恢復從指定的時間點開始 例如,從你最後一次備份 直到現在或另乙個指定的時間點的資料。mysqlbinlog 用於處理二進位制日誌檔案的實用工具 要想從二進位制日誌恢復資料,你需要知道當前二進位制日誌檔案的路徑和檔名。一般...

mysql 二進位制日誌

1.日誌型別 二進位制日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。2.配置使用二進位制日誌 在my.ini 配置 log bin mysql bin 3.二進位制日誌格式 基於段的日誌格式 binlog format statement 記錄了操作的sql語句。優...

啟用二進位制日誌

1.開啟配置檔案 sudo vi etc my.cnf 2.編輯配置檔案 log bin data mysql binlogs server1 日誌生成位置 server id 100 主從時要唯一,設定要注意 3.重啟mysql服務 sudo systemctl restart mysql 4.驗...