1. 程式人生 > >Mysql資料庫日誌大量佔用磁碟空間導致速度緩慢

Mysql資料庫日誌大量佔用磁碟空間導致速度緩慢

https://www.liaosam.com/large-mysql-log-cause-low-speed.html

故障記錄,僅供參考!使用 Linode vps 完成建站並且使用時間超過一年以上的學員可以檢查一下。

最近幫學員解答問題的時候發現有個學員用 Linode 建的網站,網站內容很多,有上百個產品也有不少 blog 文章(做內容營銷的)。他反映,用了一年多了,網站的速度最近感覺明顯很慢很慢。

重點檢查了一下快取外掛,發現是正常的。但是 FQ 訪問並操作的時候明顯感覺到很慢。

最後發現是 Linode 的磁碟空間快要滿了,硬碟空間少會會導致網站速度慢,如果空間已滿,還會導致網站無法訪問。

檢查了一下原因,是因為以前安裝 lnmp環境安裝包的時候程式預設不關閉 Mysql 的日誌檔案,導致在 /usr/local/mysql/var/ 下生成了許多名為 mysql-bin.0000* 的日誌檔案,每一個日誌檔案的大小都有1G,時間久了會佔用硬碟空間。因此我們需要清理這些檔案。

首先,xshell 連線 Linode 後,

執行命令檢視磁碟空間

df -h

接著會出現類似下面這樣的資訊:

[[email protected] ~]# df -h
Filesystem      Size  Used  Avail Use%  Mounted on
/dev/sda        20G   15.5G  3.5G  80%  /
tmpfs           493M  192K   493M   1%  /dev/shm

這位學員用的是5美金方案的 Linode,SSD硬碟 20G 容量,已用了 15.5 G 以上。

我們用 XFTP 到 /usr/local/mysql/var/ 下看一下,確實有幾個較大的名為 mysql-bin.0000* 的檔案。如:mysql-bin.000015,mysql-bin.000016 等等。。

清理 MySQL 日誌檔案

執行:/usr/local/mysql/bin/mysql -u root -p

接著提示 Enter password:

輸入資料庫管理員密碼(root password of Mysql Database),注意輸入的時候是不顯示輸入狀態的,字元不可見。所以你可以在記事本上先寫好密碼,然後複製,再滑鼠右鍵貼上進去,貼上進去的時候也不顯示,直接回車即可。

然後會提示:mysql>

此時複製並執行下面的命令,注意複製的時候要包含分號,貼上,回車執行。

reset master;

執行完後會提示類似於:“Query OK, 234 rows affected (12.3 sec)”,說明已經成功。

再輸入:quit  退出 mysql 命令模式。

此時在 XFTP 視窗中點選重新整理按鈕,可以看到 /usr/local/mysql/var/ 下的名為 mysql-bin.0000* 的日誌檔案已經清理掉。(注意其他的檔案不要去手動刪除)

我們再次執行 df -h 命令。

[[email protected] ~]# df -h
Filesystem     Size   Used  Avail Use%  Mounted on
/dev/sda       20G    8G    10G   42%   /
tmpfs          493M   192K  493M  1%    /dev/shm

可以看到空餘了不少磁碟空間。

定期自動清理MySQL日誌

用 Xftp 連線開啟 VPS 的根目錄,找到根目錄下的 etc 目錄,在該目錄下有個名為 my.cnf 的檔案。這個檔案即為 MySQL 資料庫的配置( cnf=Configuration) 檔案。

下載(或 vi 命令)用 notepad++ 修改編輯開啟它,可以看到這一行:

expire_logs_days = 10

這是代表資料庫日誌檔案過10天就失效並清理。如果你的網站流量很大(或者將來會流量很大),那麼即使是 10天產生的日誌檔案也會很大。

因此我們可以把 10 改成 5。上傳覆蓋原 my.cnf 檔案,然後重啟 mysql。

service mysql restart

這樣每過 5 天就會自動清理日誌。

我們也可以徹底禁用 MySQL 日誌。

徹底禁用MySQL日誌

修改/etc/my.cnf 檔案,找到

log-bin=mysql-bin
binlog_format=mixed

在這兩行前面加上#,將其註釋掉。上傳覆蓋原 my.cnf 檔案,然後重啟 mysql。