清除mysql的log-bin日誌的方案

來源:互聯網
上載者:User

前一陣子工作項目上的事情忙的焦頭爛額,最近要進行部門調整將要去做新的項目。又要學習很多新的知識了,還是很興奮激動的。今天下班回來查看了一下VPS狀態,發現VPS的空間只剩下了1G多!第一反應是被入侵了,但是看了一下log並沒有發現什麼異常的登入,加上平時基本都是用私密金鑰免密碼登入的VPS,別入侵的可能也不是很大。那我就很疑惑了,因為系統檔案佔用應該也就3G多,我平時並沒有在VPS放過什麼大檔案,不應該一下子少那麼多空間。於是開始一番du尋找終於找到了罪魁禍首!原來是mysql的log檔案導致的。

裝mysql並運行一段時間後,在mysql目錄下出現一堆類似mysql-bin.000***,從mysql-bin.000001開始一直排列下來,而且佔用了大量硬碟空間,高達十幾個G.。原來mysql-bin.000001、mysql-bin.000002等檔案是資料庫的動作記錄,例如UPDATE一個表,或者DELETE一些資料,即使該語句沒有匹配的資料,這個命令也會儲存到記錄檔中,還包括每個語句執行的時間,也會記錄進去的。 這些形如mysql-bin.00001的檔案主要是用來做什麼的呢? 1、資料恢複

如果你的資料庫出問題了,而你之前有過備份,那麼可以看記錄檔,找出是哪個命令導致你的資料庫出問題了,想辦法挽回損失。

2、主從伺服器之間同步資料

主伺服器上所有的操作都在記錄日誌中,從伺服器可以根據該日誌來進行,以確保兩個同步。
3、清除辦法

運行 /usr/local/mysql/bin/mysql -u root -p 登入執行:
reset master;

如果你只有一個mysql伺服器,在/etc/ 下面找到my.cnf檔案vim /etc/my.cnf把裡面的

#log-bin=mysql-bin
#binlog_format=mixed

這兩行注釋掉,然後將mysql下的var目錄中的這些記錄檔全部刪除,重啟mysql服務即可。

但是如果你設定了主從伺服器,那麼就需要做以下操作了。

A:在每個從屬伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。
B:使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。
C:在所有的從屬伺服器中判定最早的日誌,這個是目標日誌,如果所有的從屬伺服器是更新的,就是清單上的最後一個日誌。

D:清理所有的日誌,但是不包括目標日誌,因為從伺服器還要跟它同步。 簡單地說,這些MySQL目錄下的形如mysql-bin.000***的檔案時MySQL的交易記錄。 刪除複製伺服器已經拿走的binlog是安全的,一般來說網路狀況好的時候,保留最新的那一個足以。

注意:刪除mysql-bin日誌(mysql-bin.00001)導致mysql無法啟動,這個肯定是沒有修改設定檔了這會有問題的。

編輯my.cnf(一般在etc目錄下)
將log-bin=mysql-bin 注釋掉就OK。(前面加#號)
如果還不行請把binlog_format=mixed這行也注釋掉!
啟動mysql:/etc/init.d/mysql start
再解除剛才的注釋,重新啟動mysql即可:/etc/init.d/mysql restart

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.