Mysql

數據庫更改期間的 InnoDB “表 xx 已滿”

  • February 19, 2015

我在 CentOS 6.3 64 位上執行 Percona Mysql Server 5.6.14-56。

伺服器有足夠的記憶體 (96gb) 和免費儲存。文件系統類型:ext4

dev/sda6     ext4   1093623528  56576512 981494148   6% /mysqlstorage

我試圖對一個有 42M 記錄(大約 12.5gb 大小(其中大約 50% 是索引))的表進行一些更改,今天它向我顯示了 Table Is Full 錯誤。

我檢查了載入的變數,innodb_data_file_path = ibdata1:12M:autoextend它顯示在我的 mysql 管理器中。

這個數據庫是實時的,我更喜歡在沒有(或最少)停機時間的情況下解決這個問題。

file-per-table 處於活動狀態 ibdata1 約為 3.9GB

來自 MYSQL 日誌:

2015-02-19 01:43:04 7fe921f4b700 InnoDB: Error: Write to file (merge) failed at offset 356515840.
InnoDB: 1048576 bytes should have been written, only 1036288 were written.
InnoDB: Operating system error number 28.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 28 means 'No space left on device'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html

我該怎麼做呢?

// 編輯

自從問了這個問題後,我了解到在這個“交替”期間,我的 /tmp 很快就會填滿 100%。一旦達到 100%,mysql 就會推出該錯誤消息。

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             50395844   1745156  46090688   4% /
tmpfs                 37105808         0  37105808   0% /dev/shm
/dev/sda1               495844     37092    433152   8% /boot
/dev/sda5              4080064     73740   3799068   2% /tmp
/dev/sda6            1093623528  56576524 981494136   6% /storage

如何在不停機的情況下安全地增加 /tmp 的大小?

表更改涉及 /tmp 分區作為顯式和隱式創建的臨時表的中間儲存。您必須在足夠大的分區上使用 tmpdir。將下一行添加到my.cnf

tmpdir = /path/to/the/mysqltmp

引用自:https://serverfault.com/questions/669787