失落的紀錄

2013-03-19

MySQL mysql-bin.0000XX 文件的來源及處理方法

分類: Llinux,MySQL — 番茄 @ 23:36

安裝mysql以後,過一段時間會發現 /var/lib/mysql 內有 mysql-bin.000001、mysql- bin.000002等文件佔用了空間

這是資料庫的操作日誌,例如UPDATE一個表,或者DELETE一些資料,即使該語法沒有符合的資料,
這個命令也會儲存到日誌文件中,還包括每個語句執行的時間,也會記錄進去的。

 

這樣做主要有以下兩個目的:
1:恢復資料
如果你的資料庫出問題了,而你之前有過備份,那麼可以看日誌文件,找出是哪個命令導致你的資料庫出問題了,想辦法挽回損失。

2:主從服務器之間同步資料
主伺服器上所有的操作都在記錄日誌中,從伺服器可以根據該日誌來進行,以確保兩個同步。

處理方法分兩種情況:
1:只有一個mysql伺服器,清理日誌方法為:
mysql> reset master;

再來編輯 my.cnf 檔案,把裡面的log-bin這一行註解掉,重啟mysql服務即可。
vi /etc/my.cnf
把裡面的  log-bin=mysql-bin 這一行
註解掉  # log-bin=mysql-bin,然後重啟mysql服務即可。


2:如果你的環境是主從伺服器,那麼就需要做以下操作了。
A:在每個從屬伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。
B:使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。
C:在所有的從屬伺服器中判定最早的日誌,這個是目標日誌,如果所有的從屬伺服器是更新的,就是清單上的最後一個日誌。
D:清理所有的日誌,但是不包括目標日誌,因為從伺服器還要跟它同步。
清理日誌方法為:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';

如果你確定從伺服器已經同步過了,跟主伺服器一樣了,那麼可以直接RESET MASTER將這些文件刪除。

 

另外在 my.cnf 檔案內可以使用兩個參數,來讓mysql-bin.0000XX限制只留天
expire_logs_days 或 PURGE MASTER LOGS
expire_logs_days = 10 (只留11天,的紀錄檔)


如果每次執行 expire_logs_days 或 PURGE MASTER LOGS 都沒有反應,也就是說沒有把mysql-bin.0000XX刪除,有可能是之前手工刪除過mysql-bin.0000XX檔,但是卻沒有把mysql-bin.index檔案也一起更新

 

mysql-bin.index 內容格式就是一行一個mysql-bin.0000XX
./mysql-bin.000001
./mysql-bin.000002
…..(略)

 

把mysql-bin.index 內容編輯成你目前有的ysql-bin.0000XX,這樣就可以用expire_logs_days 或 PURGE MASTER LOGS來限制紀錄檔的數量

 

無迴響

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress