2009-04-08 63 views
69

我想添加一行到一個InnoDB表有一個簡單的查詢:ERROR 1114(HY000):表滿

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills'); 

但是,當我嘗試此查詢,我得到如下:

ERROR 1114 (HY000): The table `zip_codes` is full 

做一個「SELECT COUNT(*)FROM zip_codes」給了我188,959行,這看起來不像太多,考慮到我在同一個數據庫中有810,635行的另一個表。

我對InnoDB引擎相當缺乏經驗,從未遇到過MyISAM的這個問題。這裏有什麼潛在的問題?

編輯:只有在向zip_codes表添加一行時纔會發生這種情況。

+0

當您試圖插入任何表或只有zip_codes時會發生錯誤嗎? – 2009-04-08 15:44:24

回答

64

編輯:首先檢查,如果你沒有解決的配置有關決議之前運行的磁盤空間。

你似乎在你的my.cnf有過低的最大尺寸爲您innodb_data_file_path,在這個例子中

innodb_data_file_path = ibdata1:10M:autoextend:max:512M 

你不能承載超過所有InnoDB表組合數據的512MB。

也許你應該改用使用innodb_file_per_table的innodb-per-table方案。

+0

C在這裏我們得到這個my.cnf文件在Ubuntu中 – 2017-06-16 07:42:58

+2

@Nadh在Ubuntu 16.04它是`/ etc/mysql /`的一部分,並部分分割成`/ etc/mysql/conf.d`中的其他文件。 – 2017-06-17 22:01:00

2

引用MySQL文檔。

The InnoDB storage engine maintains InnoDB tables within a tablespace that can be created from several files. This allows a table to exceed the maximum individual file size. The tablespace can include raw disk partitions, which allows extremely large tables. The maximum tablespace size is 64TB.

If you are using InnoDB tables and run out of room in the InnoDB tablespace. In this case, the solution is to extend the InnoDB tablespace. See Section 13.2.5, [「Adding, Removing, or Resizing InnoDB Data and Log Files」.]

5

除非您已啓用innodb_file_per_table選項,InnoDB保持所有的數據在一個文件中,通常被稱爲ibdata1

檢查該文件的大小,並檢查它所在的驅動器中是否有足夠的磁盤空間。

0

這也可能是打開的事務的數量限制的InnoDB:

http://bugs.mysql.com/bug.php?id=26590

at 1024 transactions, that have undo records (as in, edited any data), InnoDB will fail to work

14

您需要修改限制蓋在my.cnf爲INNO_DB表設置。此內存限制未針對單個表格進行設置,它針對所有組合的表格進行設置。

如果你想在內存爲自動擴到512MB

innodb_data_file_path = ibdata1:10M:autoextend:max:512M 

如果你不知道的限制或不希望把一個限制上限,您可以修改它像這樣

innodb_data_file_path = ibdata1:10M:autoextend 
+0

我們主辦了我們的ddbb在亞馬遜上,它配置了autoextend。但是我們遇到了同樣的問題,我認爲這是由於達到配置的存儲限制 – borjab 2016-11-04 09:03:31

8

就我而言,這是因爲託管ibdata1文件的分區已滿。

22

您也將獲得同樣的錯誤ERROR 1114(HY000):表「#SQL-310a_8867d7f」充滿

,如果你嘗試將索引添加到正在使用的存儲引擎MEMORY表。

68

另一個可能的原因是分區已滿 - 這正是我現在發生的事情。

+1

這應該始終是首先要檢查的問題。總是回到電源線,我已經偶然發現了很多次。 – 2017-03-09 15:08:10

9

如果上tmpdir所在的分區填滿了(由於ALTER TABLE或其他

7

如果使用NDBCLUSTER作爲存儲引擎,你應該增加DataMemoryIndexMemory也會出現此錯誤。

Mysql FQA

8

在存儲mysql表的分區(通常是/ var/lib/mysql)或臨時表的存儲位置(通常爲/ tmp)中,可能會出現空間不足的情況。

您可能想要: - 在創建索引期間監控您的可用空間。 - 將tmpdir MySQL變量指向不同的位置。這需要重新啓動服務器。

3

我們曾:SQLSTATE [HY000]:常規錯誤:1114表 'catalog_product_index_price_bundle_sel_tmp' 充滿

要解決:

納米的/etc/my.cnf:分貝

編輯配置

tmp_table_size的= 256M max_heap_table_size = 256M

  • restart db
1

在我的情況下,服務器內存已滿,因此數據庫無法寫入臨時數據。 要解決它,你只需要在驅動器上做一些地方。

0

在CentOS 7上,停止並啓動MySQL服務爲我解決了這個問題。

sudo service mysql stop

sudo service mysql start

6

在導入8GB SQL數據庫文件我也遇到這個錯誤。檢查我的MySQL安裝驅動器。 驅動器中沒有剩餘空間。因此通過刪除不需要的項目獲得了一些空間並重新運行了我的數據庫導入命令。 這次它成功了。

1

由於磁盤空間不足,我面臨同樣的問題。而承載ibdata1文件(這是InnoDB基礎架構的系統表空間)的分區已滿。

1

我遇到了這個問題......在我的情況下,我的專用服務器上的存儲空間用完了。檢查一切是否失敗,並考慮增加磁盤空間或刪除不需要的數據或文件。