天天看點

如何管理 MySQL 的 binlog 收藏

*************************************

*                       關于 binlog              *

*************************************

--binlog 以一種更有效的格式,并且是事務安全的方式包含更新日志中可用的所有資訊。

--binlog 包含了所有更新了資料或者已經潛在更新了資料(例如,沒有比對任何行的一個DELETE)的所有語句。語句以“事件”的形式儲存,它描述資料更改。

--binlog 還包含關于每個更新資料庫的語句的執行時間資訊。它不包含沒有修改任何資料的語句。如果你想要記錄所有語句(例如,為了識别有問題的查詢),你應使用一般查詢日志。

--binlog 的主要目的是在恢複使能夠最大可能地更新資料庫,因為 binlog 包含備份後進行的所有更新。

--binlog 還用于在主複制伺服器上記錄所有将發送給從伺服器的語句。

--運作伺服器時若啟用 binlog 則性能大約慢1%。但是, binlog 的好處,即用于恢複并允許設定複制超過了這個小小的性能損失。

--當--log-bin[=file_name]選項啟動時,mysqld寫入包含所有更新資料的SQL指令的日志檔案。如果未給出file_name值, 預設名為-bin後面所跟的主機名。如果給出了檔案名,但沒有包含路徑,則檔案被寫入資料目錄。建議指定一個檔案名。如果你在日志名中提供了擴充名(例如,--log-bin=file_name.extension),則擴充名被悄悄除掉并忽略。

--mysqld在每個 binlog 名後面添加一個數字擴充名。每次你啟動伺服器或重新整理日志時該數字則增加。如果目前的日志大小達到max_binlog_size,還會自動建立新的 binlog 。如果你正使用大的事務, binlog 還會超過max_binlog_size:事務全寫入一個 binlog 中,絕對不要寫入不同的 binlog 中。

--為了能夠知道還使用了哪個不同的 binlog 檔案,mysqld還建立一個 binlog 索引檔案,包含所有使用的 binlog 檔案的檔案名。預設情況下與 binlog 檔案的檔案名相同,擴充名為'.index'。你可以用--log-bin-index[=file_name]選項更改 binlog 索引檔案的檔案名。當mysqld在運作時,不應手動編輯該檔案;如果這樣做将會使mysqld變得混亂。

--binlog 格式有一些已知限制,會影響從備份恢複。

--預設情況下,并不是每次寫入時都将 binlog 與硬碟同步。是以如果作業系統或機器(不僅僅是MySQL伺服器)崩潰,有可能 binlog 中最後的語句丢失了。要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使 binlog 在每N次 binlog 寫入後與硬碟同步。

************************************************

*                如何管理 MySQL 的 binlog           *

************************************************

1、在 my.ini 中增加下述參數,指定儲存更新到 binlog 的資料庫:db_name,未在此指定的資料庫将不記錄 binlog

--binlog-do-db=db_name

2、在 my.ini 中增加下述參數,指定不儲存更新到 binlog 的資料庫:db_name

--binlog-ignore-db=db_name

3、如果 binlog 已經産生,可以通過 SQL 指令行清除:

RESET MASTER;

PURGE MASTER LOGS TO 'mysql-bin.010';

PURGE MASTER LOGS BEFORE '2006-06-06 06:06:06';

PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/ccsdba/archive/2007/10/18/1831193.aspx