1. 程式人生 > >mysql佔用大量磁碟空間問題原因及解決方法

mysql佔用大量磁碟空間問題原因及解決方法

前言

我們使用mysql或者是其他的資料的時候總是會遇到資料庫佔用大量磁碟空間,導致磁碟空間不足,從而導致其他問題(例如:資料庫重啟後無法啟動;資料庫無法寫入資料等)。
要解決這一個問題,方法就是對資料庫的某些不必要的檔案進行刪除。在mysql資料庫中佔用大量磁碟空間的一般是binlog日誌,因為它裡面記錄著資料庫中資料的變動,所以它會隨著時間的積累不斷的變大,其存在的意義在於便於以後根據日誌對資料的基於時間或位置的恢復和報錯處理。

下面介紹的就是解決mysql資料庫佔用大量磁碟空間的解決方法。

解決方法

【方法一】手動刪除

【1】檢視是否mysql的binlog日誌是否過大

由於mysql的安裝版本或安裝方式,其binlog日誌所在的位置或日誌名稱都不同,需根據自己的情況,檢視日誌大小。
(一般位置為/var/lib//mysql/或/usr/local/mysql/var/)

<1>檢視

cd /mysql/data/
du -sh *
這裡寫圖片描述

上圖為本人實際binlog日誌所在位置。由上圖可知,的確是mysql的binlog日誌過大,佔用了磁碟空間。

【2】刪除日誌檔案

有兩種情況

情況1:該資料庫未做主從

<1>刪除日誌

資料庫中執行:
reset master;

如該資料庫有主從也可使用此命令,但是易導致主從同步失敗。

情況2:該資料庫已做主從

<1>檢視主庫和每個從庫正在使用的binlog是哪個檔案

show master status;

這裡寫圖片描述

show slave status\G;
這裡寫圖片描述

<2>刪除指定的日誌序號之前或日期之前的日誌索引中的所有二進位制日誌

purge master logs to’mysql-bin.000003’;
purge master logs before’2018-08-29 12:00:00’;

這裡寫圖片描述

注意:
不可刪除正在使用的binlog
時間和檔名不可寫錯(要依據自己的真實情況)

【3】reset master與purge binary logs區別

reset master:刪除所有的binglog日誌檔案,並將日誌索引檔案清空,重新開始新的日誌檔案。
purge binary logs:基於某時間點的刪除日誌

【方法二】系統定期刪除binlog檔案

<1>檢視當前的日誌儲存天數
show variables like ‘expire_logs_days’;

這裡寫圖片描述

<2>設定只保留3天的binlog

(臨時,重啟mysql這個引數會失敗)
set global expire_logs_days = 3;

(永久,my.cnf中新增,重啟後生效)、
expire_logs_days = 3

注意:
預設值為0,表示“沒有啟用自動刪除”
過期時間設定的要適當

【方法三】禁用binlog

如使用主從,禁止此操作

<1>將my.cnf中的下列註釋掉

#log-bin=mysql-bin
#binlog_format=mixed

<2>重啟mysql

systemctl restart mysql (centos 7)
/etc/init.d/mysql restart (centos 6)