由於磁碟已滿,mysqld 不再啟動

由於磁碟已滿,mysqld 不再啟動

如何清理日誌或找到最大的檔案並減少空間?我也不明白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 伺服器能夠啟動。因此,程序應該如下:

  1. 依照@John WH Smith 的描述,將 mysql 資料移到 /home 分割區。
  2. 依照@John WH Smith 的描述更改 datadir 變數並執行 mysql 伺服器。
  3. 透過 PMA、mysql 或其他用戶端以 root 使用者身分連接到 mysql 伺服器。
  4. 使用 RESET MASTER 或 PURGE BINARY LOGS TO 命令清除二進位日誌(有關詳細信息,請參閱 mysql 文件)。
  5. 停止 mysql 伺服器。編輯 mysql 設定檔。記住“log_bin”變數的值。它包含二進制日誌檔案的路徑和名稱。
  6. 將所有binlog檔案(包括binlog索引)移到/home/mysql/目錄。
  7. 將'log_bin'變數值改為'log_bin = /home/mysql/mysql-bin.log',然後啟動mysql資料庫。

相關內容