Mysql
數據庫更改期間的 InnoDB “表 xx 已滿”
我在 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