mysql的binlog詳解


什麼是binlogmysql

binlog日誌用於記錄全部更新了數據或者已經潛在更新了數據(例如,沒有匹配任何行的一個DELETE)的全部語句。語句以事件的形式保存,它描述數據更改。sql

binlog做用數據庫

由於有了數據更新的binlog,因此能夠用於實時備份,與master/slave複製緩存

和binlog有關參數服務器

 

log_binsession

設置此參數表示啓用binlog功能,並指定路徑名稱ide

log_bin_index性能

設置此參數是指定二進制索引文件的路徑與名稱測試

binlog_do_dbthis

此參數表示只記錄指定數據庫的二進制日誌

binlog_ignore_db

此參數表示不記錄指定的數據庫的二進制日誌

max_binlog_cache_size

此參數表示binlog使用的內存最大的尺寸

binlog_cache_size

此參數表示binlog使用的內存大小,能夠經過狀態變量binlog_cache_use和binlog_cache_disk_use來幫助測試。

       binlog_cache_use:使用二進制日誌緩存的事務數量

       binlog_cache_disk_use:使用二進制日誌緩存但超過binlog_cache_size值並使用臨時文件來保存事務中的語句的事務數量

 

max_binlog_size

Binlog最大值,最大和默認值是1GB,該設置並不能嚴格控制Binlog的大小,尤爲是Binlog比較靠近最大值而又遇到一個比較大事務時,爲了保證事務的完整性,不可能作切換日誌的動做,只能將該事務的全部SQL都記錄進當前日誌,直到事務結束

sync_binlog

這個參數直接影響mysql的性能和完整性

sync_binlog=0:

當事務提交後,Mysql僅僅是將binlog_cache中的數據寫入Binlog文件,但不執行fsync之類的磁盤        同步指令通知文件系統將緩存刷新到磁盤,而讓Filesystem自行決定何時來作同步,這個是性能最好的。

sync_binlog=n,在進行n次事務提交之後,Mysql將執行一次fsync之類的磁盤同步指令,同志文件系統將Binlog文件緩存刷新到磁盤。

Mysql中默認的設置是sync_binlog=0,即不做任何強制性的磁盤刷新指令,這時性能是最好的,但風險也是最大的。一旦系統繃Crash,在文件系統緩存中的全部Binlog信息都會丟失

 

binlog的刪除

binlog的刪除能夠手工刪除或自動刪除

自動刪除binlog

經過binlog參數(expire_logs_days )來實現mysql自動刪除binlog

mysql> show binary logs;

mysql> show variables like 'expire_logs_days';

mysql> set global expire_logs_days=3;

手工刪除binlog

mysql> reset master;   //刪除master的binlog

mysql> reset slave;    //刪除slave的中繼日誌

mysql> purge master logs before '2012-03-30 17:20:00';  //刪除指定日期之前的日誌索引中binlog日誌文件

mysql> purge master logs to 'binlog.000002';   //刪除指定日誌文件的日誌索引中binlog日誌文件

或者直接用操做系統命令直接刪除

 

mysql> set sql_log_bin=1/0; //若是用戶有super權限,能夠啓用或禁用當前會話的binlog記錄

mysql> show master logs; //查看master的binlog日誌 

mysql> show binary logs; //查看master的binlog日誌

mysql> show master status; //用於提供master二進制日誌文件的狀態信息

mysql> show slave hosts; //顯示當前註冊的slave的列表。不以--report-host=slave_name選項爲開頭的slave不會顯示在本列表中

binglog的查看

經過mysqlbinlog命令能夠查看binlog的內容

[root@localhost ~]# mysqlbinlog  /home/mysql/binlog/binlog.000003  | more

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#120330 16:51:46 server id 1  end_log_pos 98    Start: binlog v 4, server v 5.0.45-log created 120330 1

6:51:46

# Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.

# at 196

#120330 17:54:15 server id 1  end_log_pos 294   Query   thread_id=3     exec_time=2     error_code=0

SET TIMESTAMP=1333101255/*!*/;

insert into tt7 select * from tt7/*!*/;

# at 294

#120330 17:54:46 server id 1  end_log_pos 388   Query   thread_id=3     exec_time=28    error_code=0

SET TIMESTAMP=1333101286/*!*/;

alter table tt7 engine=innodb/*!*/;

 

解析binlog格式

位置

位於文件中的位置,at 196說明事件的起點,是以第196字節開始;end_log_pos 294說明以第294字節結束

 

時間戳

事件發生的時間戳:120330 17:54:46

 

事件執行時間

事件執行花費的時間:"exec_time=28"

 

錯誤碼

錯誤碼爲:error_code=0

 

服務器的標識

服務器的標識id:server id 1

相關文章
相關標籤/搜索