MySQL 使用了執行 ALTER 的所有驅動器空間,現在無法啟動
我試圖在不注意大小的情況下更改表,MySQL 佔用了驅動器上的所有可用空間。我刪除了大約一百萬條舊記錄,但空間仍在使用中。
Google搜尋建議重新啟動 MySQL 伺服器會有所幫助,但伺服器不會啟動:
[FAIL] /etc/init.d/mysql: ERROR: The partition with /var/lib/mysql is too full! ... failed!
所以現在我有點卡住了。我的數據庫只有一個(非常大)表:
# ls -lh total 18G -rw-r--r-- 1 mysql mysql 0 Sep 25 2014 debian-5.5.flag -rw-rw---- 1 mysql mysql 18G Jul 13 15:17 ibdata1 -rw-rw---- 1 mysql mysql 5.0M Jul 13 15:17 ib_logfile0 -rw-rw---- 1 mysql mysql 5.0M Jul 13 15:15 ib_logfile1 drwx------ 2 mysql mysql 4.0K Jul 13 11:44 log drwx------ 2 mysql mysql 4.0K Sep 25 2014 mysql -rw------- 1 mysql mysql 6 Sep 25 2014 mysql_upgrade_info drwx------ 2 mysql mysql 4.0K Sep 25 2014 performance_schema drwx------ 2 mysql mysql 4.0K Dec 4 2013 test
所以,具體來說,我的問題是:當我試圖改變一個大表時,如何釋放 MySQL 使用的驅動器空間?
$$ edit $$我應該提一下,我在任何其他驅動器上都沒有空間,而且我也無法更改驅動器的大小:-( $$ edit2 $$回應評論:
mysql> OPTIMIZE TABLE `emails`; +------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------+----------+----------+-------------------------------------------------------------------+ | log.emails | optimize | note | Table does not support optimize, doing recreate + analyze instead | | log.emails | optimize | error | The table '#sql-8aa_25' is full | | log.emails | optimize | status | Operation failed | +------------+----------+----------+-------------------------------------------------------------------+ 3 rows in set, 1 warning (1 hour 12 min 10.62 sec) # df -h Filesystem Size Used Avail Use% Mounted on rootfs 20G 19G 0 100% / udev 10M 0 10M 0% /dev tmpfs 100M 128K 100M 1% /run /dev/xvda1 20G 19G 0 100% / tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 200M 0 200M 0% /run/shm
找到文件
#sql-8aa_25
並將其刪除。它可能在數據庫所在的同一目錄中。如果您執行了
kill -9
,則 mysqld 沒有機會刪除 tmp 文件。
我會做兩件事之一:
使用 zip 驅動器或類似驅動器將數據庫複製到另一個系統。由於磁碟如此便宜——歐洲 12 歐元的 32GB USB 記憶棒,你不能使用其中一個嗎?然後,將你的 datadir 複製到它上面,在另一台機器上恢復它。如今,即使是最弱的筆記型電腦(或像樣的平板電腦)也應該能夠應付 32GB 的 db。您可能希望在複製之前先對其進行 gzip 壓縮。
如果做不到這一點,您可以安裝更多 RAM 並設置記憶體文件系統,如這兩篇文章(第一篇,第二篇)中很好解釋的那樣- Google搜尋“ linux put a partition in ram ”上的其他連結。
此外,在恢復我的數據後,我會將那台機器託付給天空中的偉大伺服器機房。它顯然已經到了使用壽命的盡頭(儘管看到這個:-))。
最後,請記住,如果您沒有保留一些磁碟空間,Unix 往往會進行大量記憶體和交換,並且會變得非常暴躁。因此,請設置某種監控,當磁碟空間使用率超過 75% 時會向您發出警告。
ps出於好奇,這台機器是什麼,你執行的是什麼作業系統?