MySQL binlog 安全刪除
簡介:
如果你的 MySQL 搭建了主從同步 , 或者資料庫開啟了 log-bin 日誌 , 那麼隨著時間的推移 , 你的資料庫 data 目錄下會產生大量的記錄檔
shell > ll /usr/local/mysql/data/ # 如下
-rw-rw----. 1 mysql mysql 63278 9月 11 02:03 mysql-bin.000001
-rw-rw----. 1 mysql mysql 1096670 9月 11 02:03 mysql-bin.000002
-rw-rw----. 1 mysql mysql 133 9月 11 02:04 mysql-bin.000003
-rw-rw----. 1 mysql mysql 133 9月 12 02:00 mysql-bin.000004
-rw-rw----. 1 mysql mysql 271 9月 12 18:25 mysql-bin.000005
-rw-rw----. 1 mysql mysql 133 9月 12 18:55 mysql-bin.000006
-rw-rw----. 1 mysql mysql 133 9月 12 19:48 mysql-bin.000007
-rw-rw----. 1 mysql mysql 133 9月 12 21:21 mysql-bin.000008
-rw-rw----. 1 mysql mysql 321 11月 18 17:30 mysql-bin.000009
# 由於我的是測試環境 , 所以檔案還很小 , 生產環境中這些檔案如果不做處理的話 , 甚至會撐爆你的磁碟
下面來介紹幾種解決方案:
~~> 如果你的資料庫沒有搭建主從同步這樣的服務 , binlog 日誌也不用的情況下 , 你可以將 /etc/my.cnf 檔案下面行刪除或注釋掉
log-bin=mysql-bin
~~> 如果你需要這樣的檔案 , 那麼建議你在主設定檔 /etc/my.cnf 中添加如下行 , 來限制 binlog 記錄檔存在時間 , 到期自動刪除
expire_logs_days = 7 # 只保留 7 天的記錄檔
~~> 如果你直接得到一台伺服器 , 上面的 binlog 日誌已經影響到了磁碟空間 , 那麼你將使用下面命令清除
mysql> reset master; # 清空所有 binlog 檔案
~~> 如果你的得到的伺服器 , mysql 還做了主從同步 , 那麼上面的命令就不適合你了 , 因為 binlog 檔案刪除過多的話 , 會導致資料不同步
mysql> show slave status\G # 你首先要來 slave 上查看從庫讀 binlog 到了哪裡
Master_Log_File: mysql-bin.000009 # 我們可以看到是 mysql-bin.000009
mysql> purge master logs to 'mysql-bin.000009'; # 我們可以在 master 中執行這條指令 , 將 binlog 檔案刪除至 mysql-bin.000009 前
mysql> purge master logs before '2014-11-18 00:00:00'; # 將 binlog 檔案刪除至此日期前
本文永久更新連結地址: