Mysql
MySQL複製臨時表填充磁碟,如何刪除臨時文件?
什麼是最安全的清理方法?
Debian 8 上的 MySQL 伺服器 5.5.62-0,沒有複製。
我犯了一個錯誤,在 26GB 表上創建了一個新列。
SHOW PROCESSLIST
顯示 MySQL 正在以 100% CPU 將數據複製到 tmp 表中。+-----------+------+-----------+--------+---------+------+-------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----------+------+-----------+--------+---------+------+-------------------+------------------+ | 145904211 | root | localhost | huge | Query | 160 | copy to tmp table | ALTER TABLE ... | | 145905739 | root | localhost | NULL | Query | 0 | NULL | show processlist | +-----------+------+-----------+--------+---------+------+-------------------+------------------+
幾分鐘後,主分區已滿,CPU 降至 0。我曾經
systemctl stop mysql
希望它會清理臨時文件。該服務也不會重新啟動。$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 79G 75G 1000K 100% / $ sudo systemctl start mysql Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.
我關閉了 VPS 並擴展了磁碟。伺服器重新啟動正常,我能夠啟動 MySQL 程序並連接到它。一切似乎都在運作。
然而,自 20 分鐘前的事件以來,磁碟使用量並未減少。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 158G 75G 75G 50% /
家政服務會開始還是我應該手動清理我弄的爛攤子?最安全的方法是什麼?
首先,從 mysql 命令行工具:
kill 145904211;
那應該把事情清理乾淨。如果沒有,請四處尋找以
#sql...
. 其中一個將是巨大的,帶有ALTER
執行時間的時間戳。只需將其刪除。為了安全起見
ALTER
,至少在 5.5 天內,它的工作方式如下:
- 像現有表一樣創建一個新的空表。
- 更改架構(在您的情況下添加一列)
- 將現有表中的所有數據複製到新表中。(慢的部分)
- 做一些表重命名。
- 放下舊桌子。
您可能正處於第 3 步的中間。
唯一有風險的時間是在第 4 步,這非常快。在此之前,舊桌子還活著。之後,新表已替換它。