今天在作遊戲DB的壓力測試時,運行測試案例一段時間後,發現用戶端實然登入不了,後經定位,自己現是mysql binlog日誌寫滿,導致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 命令列清除:
/*
* 要清理日誌,需按照以下步驟:
* 1 在每個從屬伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。
* 2 使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。
* 3 在所有的從屬伺服器中判定最早的日誌。這個是目標日誌。如果所有的從屬伺服器是更新的,這是清單上的最後一個日誌。
* 4 製作您將要刪除的所有日誌的備份。(這個步驟是自選的,但是建議採用。)
* 5 清理所有的日誌,但是不包括目標日誌。
*
*/
/*
* 清除 binlog
*
* 為了執行RESET,您必須擁有RELOAD許可權。
* 以下命令將刪除列於索引檔案中的所有 binlog,把 binlog 索引檔案重新設定為空白,並建立一個新的 binlog。
* (在以前版本的MySQL中,被稱為FLUSH MASTER。)
*/
RESET MASTER;
/*
* 清除指定的 binlog
*
*/
PURGE MASTER LOGS TO 'mysql-bin.010';
/*
* 清除日期為 2006-06-06 06:06:06 以前的 binlog
*
* BEFORE變數的date自變數可以為'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同義字。
*/
PURGE MASTER LOGS BEFORE '2006-06-06 06:06:06';
/*
* 清除3天前的 binlog
*
*/
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);