如何清理日誌或找到最大的檔案並減少空間?我也不明白1.7T竟然沒有在這個關鍵時刻使用。
Mysqld 未運行,因為 99% 已使用。
# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 20G 19G 279M 99% /
/dev/root 20G 19G 279M 99% /
devtmpfs 32G 268K 32G 1% /dev
/dev/md3 1.8T 196M 1.7T 1% /home
tmpfs 32G 0 32G 0% /dev/shm
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named
/dev/root 20G 19G 279M 99% /var/named/chroot/var/named
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.conf
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.rfc1912.zones
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/rndc.key
/dev/root 20G 19G 279M 99% /var/named/chroot/usr/lib64/bind
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.iscdlv.key
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.root.key
答案1
MySQL 資料儲存在/var/lib
.中已經沒有空間了/var
。 MySQL 無法啟動。其實很簡單。看看/var/log
並清理它。我會推薦類似的東西(刪除gz
中的所有文件/var/log
):
$ find /var/log -iname "*.gz" -delete
當然,您可能想先檢查刪除的內容:
$ find /var/log -iname "*.gz"
1.7TB 分配給/home
.然而並非/var
如此/home
。所以/home
沒有被使用。也很簡單。
/var
當您設定係統時,您顯然應該在一個更大的分割區上分開。現在,我能遇到的最佳解決方案是將 MySQL datadir 移到更大的分區 ( /home
) :
$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql
如果您不想使用鏈接,則應重新配置 MySQL 以使用儲存在/home
.編輯/etc/mysql/my.cnf
並更改此內容:
datadir = /var/lib/mysql
對此:
datadir = /home/mysql
現在 MySQL 有可用空間,它應該可以順利啟動。如果您託管如此重要的資料庫,您確實應該重新考慮您的分區方案。
您可能還想調查日誌的內容,因為如果一切順利,應用程式不應該向日誌寫入太多內容。有些東西可能在某個地方難以正常運作。
答案2
這是查找最大文件的有用命令:
du -ak /var | sort -nr | less
用法:
du -ak
-a
匯總分割區中所有 ( ) 檔案的磁碟使用情況/var
並列印大小(以千位元組為單位) ( -k
)。
sort -nr
連接檔案清單並將它們以相反 ( -r
) 數字 ( -n
) 順序排序。
less
將對輸出進行分頁,以便您可以在頂部看到最大的違規者,並在清單中前後移動。
答案3
我想指出,這也可能是 mysql 二進位日誌的問題,而不是資料庫檔案本身的問題。在許多情況下,Binlog 預設放置在 /var/log/mysql 目錄中,它們往往比資料庫檔案消耗數倍的磁碟空間。這是因為二進位日誌儲存所有 SQL 資料修改查詢(UPDATE、INSERT 等)以追蹤資料庫資料變更。不應透過 shell rm 指令直接刪除 Binlog,而只能透過正在執行的資料庫引擎上的 mysql 指令來刪除。為此,mysql 伺服器必須啟動。我認為將 /var/lib/mysql 目錄移動到 /home 分區應該可以釋放 / 分區上足夠的空間,使 mysql 伺服器能夠啟動。因此,程序應該如下:
- 依照@John WH Smith 的描述,將 mysql 資料移到 /home 分割區。
- 依照@John WH Smith 的描述更改 datadir 變數並執行 mysql 伺服器。
- 透過 PMA、mysql 或其他用戶端以 root 使用者身分連接到 mysql 伺服器。
- 使用 RESET MASTER 或 PURGE BINARY LOGS TO 命令清除二進位日誌(有關詳細信息,請參閱 mysql 文件)。
- 停止 mysql 伺服器。編輯 mysql 設定檔。記住“log_bin”變數的值。它包含二進制日誌檔案的路徑和名稱。
- 將所有binlog檔案(包括binlog索引)移到/home/mysql/目錄。
- 將'log_bin'變數值改為'log_bin = /home/mysql/mysql-bin.log',然後啟動mysql資料庫。