MySQL 驚魂記

其實我很久沒去動伺服器了,前幾天放假時心血來潮,下幾個指令看看硬碟的狀況,不看還好,一看吐血…

roga@Lab3:~$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0              229G   62G  168G  27% /
tmpfs                 507M     0  507M   0% /lib/init/rw
udev                   10M   44K   10M   1% /dev
tmpfs                 507M     0  507M   0% /dev/shm
roga@Lab3:~$

我明明硬碟上什麼都沒放,怎麼會活生生被吃掉 62G 呢!?

用指令 root@Lab3:/# du -ckhs /* 一層一層慢慢查才發現原來 /var/log/mysql 裡面有一大堆 mysql-bin.0000XX ,原來這些都是 MySQL 的 Binary Log ,讓你在 MySQL 爛掉的時候可以用 Binary Log 救回來。由於我都直接 dump 每日備份,所以這個 Replay 用的 Binary Log 當然這就用不到啦!上網找了方法,只要在 my.cnf 裡面找到以下兩行設定:

expire_logs_days = 10
max_binlog_size = 100M

把 size 和保留天數調整一下就可以了。之後重新啟動 MySQL 即可見效,如果試了很多次 MySQL 都再起不能的話,直接把 /var/log/mysql 裡面的 binary 檔都移掉,這樣就可以正常重新啟動了。

注意:執行這個作法之前,請確定資料庫備份方案足夠完善,以免哪天 crash 沒有東西可以備份還原。

Posted in DB
One comment on “MySQL 驚魂記
  1. roga says:

    附註,如果把

    #server-id              = 1
    #log_bin                        = /var/log/mysql/mysql-bin.log
    #expire_logs_days       = 1
    #max_binlog_size         = 10M
    

    註解掉的話,就可以停用 Binary Log 取而代之的是一般的 Log 而且會自動 rotate 。

Leave a Reply

Your email address will not be published.