MySQL 查詢 INSERT INTO … 失敗 - 表“x”已滿
如果我的問題不完整或愚蠢,我深表歉意,我對 SQL 的了解非常有限,但老闆希望我解決這個問題。
環境:Webmin/Virtualmin | CentOS 6.5 上的 MySQL 版本 5.1.73
基本上,我收到表“Email_Messages”已滿的錯誤。我將“Email_Messages”表與數據庫中的其他表進行比較,它的單元格計數約為 232K,但其他的單元格計數更高:一個有 334K。
我的磁碟上還有 8GB 的可用空間,Google搜尋告訴我,對於超出作業系統限制的表的大小確實沒有太多限制。看起來有問題的數據庫只有 203mb。
關於如何進一步解決此問題/增加最大表大小的任何想法?
非常感謝 - 讓我知道我可以提供哪些其他資訊。
我認為問題根本不是 InnoDB 表大小限制。
我
Table is Full
在 InnoDB Plumbing 中有關於 InnoDB Tables 的文章
May 31, 2013
:如何用“innodb_file_per_table”解決“表…已滿”?Mar 31, 2014
: mysql目錄一次查詢後增長到246G,由於表已滿而失敗我的猜測是您的 InnoDB 日誌文件(ib_logfile0、ib_logfile1)可能太小了。(請參閱我在 CAVEAT #2 下的第二篇文章)
由於您使用的是 MySQL 5.1.73,您將不得不增加innodb_log_file_size和innodb_log_buffer_size做一些體力勞動。方法如下:
STEP 01 : 將這些行添加
my.cnf
到$$ mysqld $$組頭[mysqld] innodb_log_file_size=1G innodb_log_buffer_size=64M
步驟 02:以 root@localhost 登錄並執行此命令
SET GLOBAL innodb_fast_shutdown = 0;
步驟 03:關閉 mysql
service mysql stop
步驟 04:重命名日誌文件
cd /var/lib/mysql mv ib_logfile0 ib_logfile0.old mv ib_logfile1 ib_logfile1.old
步驟 05:啟動 mysql
service mysql start
這將重新生成每個 1G 的新日誌文件。
拜託,試試看有沒有用!!!
幾個月前我的 MySQL 數據庫空間不足,儘管看起來有足夠的可用磁碟空間。這是由於 MySQL(在大多數 Linux 系統下)將數據庫安裝在 /root 中導致空間不足,而 /home 中有很多空間。將數據庫從 /root 移動到 /home 解決了這個問題。