2016-04-26

MySQL 的 bin log 太多如何清除?


你的 mysql 是不是有很多這種檔案呢?
-rw-rw---- 1 mysql mysql        331 10月  5  2015 mysql-bin.000001
-rw-rw---- 1 mysql mysql      12438 10月  5  2015 mysql-bin.000002
-rw-rw---- 1 mysql mysql        345 10月  5  2015 mysql-bin.000003
-rw-rw---- 1 mysql mysql       7399 10月  6  2015 mysql-bin.000004
-rw-rw---- 1 mysql mysql        345 10月  6  2015 mysql-bin.000005
-rw-rw---- 1 mysql mysql  230144205 11月 13 07:31 mysql-bin.000006
-rw-rw---- 1 mysql mysql        384 11月 13 07:31 mysql-bin.000007
-rw-rw---- 1 mysql mysql        345 11月 13 07:32 mysql-bin.000008
-rw-rw---- 1 mysql mysql   17817067 11月 18 02:44 mysql-bin.000009
-rw-rw---- 1 mysql mysql        345 11月 18 02:45 mysql-bin.000010
-rw-rw---- 1 mysql mysql  929645543  3月 11 07:48 mysql-bin.000011

它佔據了你的伺服器很大空間你是否很想刪掉它呢?
千萬不要這麼做 
# rm -rf mysql-bin.000001  (X, 錯誤做法)


你應該由 mysql 去控制/刪除這些檔
刪除單一檔的指令是 : PURGE BINARY LOGS TO 'mysql-bin.000001’;
先進 mysql console
#mysql -u root  -p    (如果你的管理員是 root 的話)
執行 purge log 指令 (我相信你應該也是用 mariadb 開 clustering 作 replication,故這裡我直接 show MariaDB, MariaDB 其實就是 MySQL)
MariaDB [blue_footed_db]> PURGE BINARY LOGS TO ‘mysql-bin.000001';


若是一個一個的去刪檔案是不符合人類的行為法則,
如果你想刪除 7 天前的檔案指令是:PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 7 DAY) + INTERVAL 0 SECOND;

一樣,進 mysql console或可以下 SQL的地方,例如 phpmyadmin,執行以下指令
MariaDB [blue_footed_db]> PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 7 DAY) + INTERVAL 0 SECOND;


若每次都要手動刪除7天前的檔案不是你想要的,你覺得 log 若超過7天就不重要了,想要它能自動刪除7天前的 log,那麼請在你的 my.cnf 加入 expire-logs-days=7

$nano /etc/my.cnf
於 mysqld 這個 session 加入 expire-logs-days=7 (注意:你的 mysql 有可能是在 /etc/my.cnf.d/mysql-clients.cnf  , 因為 /etc/my.cnf 會 include my.cnf.d 下的所有 configurations)

[mysqld]
expire-logs-days=7


設完 my.cnf 後記得重啟 service 讓 mysql daemond 吃  ini 的設值
# service mysql restart


如果你根本沒有在作 replication, 那麼我建議你是可以關掉 log-bin 的,註解掉它吧,一牢永逸,完全符合人類的惰性,只需一個小小的 # 字號
# Replication Master Server (default)
# binary logging is required for replication

#log-bin=mysql-bin 



沒有留言:

張貼留言