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。