什麼是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」