最安全的清理方法是什麼?
Debian 8 上的 MySQL 伺服器 5.5.62-0,無複製。
我犯了一個錯誤,在 26GB 表上建立了一個新列。SHOW PROCESSLIST
顯示 MySQL 正在以 100% CPU 的速度將資料複製到臨時表。
+-----------+------+-----------+--------+---------+------+-------------------+------------------+
| 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% /
客房服務會介入還是我應該手動清理我造成的混亂?最安全的方法是什麼?
答案1
首先,從 mysql 命令列工具:
kill 145904211;
那應該把東西清理乾淨。如果沒有,請尋找以#sql...
.其中之一將是巨大的,帶有ALTER
運行時的時間戳。只需將其刪除即可。
為了安全起見ALTER
,至少在 5.5 天內,工作如下:
- 建立一個新的空表,就像現有表一樣。
- 更改架構(根據您的情況添加一列)
- 將現有表中的所有資料複製到新表中。 (慢速部分)
- 進行一些表重命名。
- 放下舊桌子。
您可能在第 3 步中陷入困境。
唯一有風險的時間是第 4 步,時間非常快。在此之前,舊桌子還活著並且完好無損。之後,新表取代了它。