1114 (HY000): Bảng đã đầy


114

Tôi đang cố thêm một hàng vào InnoDBbảng bằng một truy vấn đơn giản:

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

Nhưng khi tôi thử truy vấn này, tôi nhận được như sau:

ERROR 1114 (HY000): Bảng đã zip_codesđầy

Làm một

SELECT COUNT(*) FROM zip_codes

cung cấp cho tôi 188,959 hàng, có vẻ như không quá nhiều khi tôi có một bảng khác với 810,635 hàng trong cùng cơ sở dữ liệu đó.

Tôi khá thiếu kinh nghiệm với InnoDB enginevà chưa bao giờ gặp vấn đề này với MyISAM. Một số vấn đề tiềm ẩn ở đây là gì?

CHỈNH SỬA: Điều này chỉ xảy ra khi thêm một hàng vào zip_codesbảng.


Có phải lỗi xảy ra khi bạn cố gắng chèn vào bất kỳ bảng nào hay chỉ một mã zip_codes không?
Chad Birch

Câu trả lời:


92

CHỈNH SỬA: Đầu tiên hãy kiểm tra, nếu bạn không hết dung lượng đĩa, trước khi chuyển sang độ phân giải liên quan đến cấu hình.

Bạn dường như có kích thước tối đa quá thấp so với innodb_data_file_pathtrong của bạn my.cnf, Trong ví dụ này

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

bạn không thể lưu trữ nhiều hơn 512MB dữ liệu trong tất cả các bảng innodb kết hợp.

Có lẽ bạn nên chuyển sang sử dụng lược đồ innodb-per-table innodb_file_per_table.


C nơi chúng tôi nhận được tệp my.cnf này trong ubuntu

3
@Nadh Trong Ubuntu 16.04 của nó một phần của /etc/mysql/và là một phần tách ra thành các file bổ sung trong/etc/mysql/conf.d
Martin C.

Mỏ làm việc sau khi thêm innodb_data_file_pathdòng vào /etc/mysql/mysql.conf.d/mysqld.cnfvà khởi động lại mysqlapache2 dịch vụ
Timmah

81

Một lý do có thể khác là phân vùng bị đầy - đây chỉ là những gì đã xảy ra với tôi bây giờ.


1
Đây luôn phải là điều đầu tiên cần kiểm tra. Luôn luôn quay lại với dây điện, tôi đã vấp phải điều này nhiều lần.
Steven Church

1
Bạn đã tiết kiệm cho tôi vài giờ khi cố gắng thay đổi cấu hình mysql. Phân vùng chính đã đầy. Đã phải di chuyển cơ sở dữ liệu mysql để phân vùng dữ liệu và sau đó tạo ra một liên kết mềm
Ganesh Krishnan

2
sử dụng df -hđể kiểm tra kích thước đĩa
Amit Bera

25

Bạn cũng sẽ gặp lỗi tương tự LỖI 1114 (HY000): Bảng '# sql-310a_8867d7f' đã đầy

nếu bạn cố gắng thêm một chỉ mục vào bảng đang sử dụng công cụ lưu trữ MEMORY.


Điều này đã xảy ra với tôi nhưng có vẻ như khách hàng của tôi đã sử dụng sai cú pháp. Khi thêm cùng một chỉ mục với một đơn giản, ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);nó đã hoạt động.
thephper

22

Bạn cần sửa đổi giới hạn giới hạn được đặt trong my.cnf cho các bảng INNO_DB. Giới hạn bộ nhớ này không được đặt cho các bảng riêng lẻ, nó được đặt cho tất cả các bảng được kết hợp.

Nếu bạn muốn bộ nhớ tự động mở rộng thành 512MB

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

Nếu bạn không biết giới hạn hoặc không muốn đặt giới hạn, bạn có thể sửa đổi nó như thế này

innodb_data_file_path = ibdata1:10M:autoextend

Chúng tôi đã lưu trữ ddbb của mình trên Amazon và nó đã được định cấu hình với tính năng autoextend. Nhưng chúng tôi đã gặp cùng một vấn đề mà tôi cho rằng do đạt đến giới hạn được lưu trữ đã định cấu hình
borjab

12

Lỗi này cũng xuất hiện nếu phân vùng nằm trên đó tmpdirđầy (do bảng thay đổi hoặc


11

Trong trường hợp của tôi, điều này là do phân vùng lưu trữ tệp ibdata1 đã đầy.


10

Bạn có thể sắp hết dung lượng trong phân vùng nơi lưu trữ các bảng mysql (thường là / var / lib / mysql) hoặc trong nơi lưu trữ các bảng tạm thời (thường là / tmp).

Bạn có thể muốn: - theo dõi dung lượng trống của mình trong quá trình tạo chỉ mục. - trỏ biến tmpdir MySQL đến một vị trí khác. Điều này yêu cầu khởi động lại máy chủ.


8

Tôi cũng gặp phải lỗi này khi nhập tệp cơ sở dữ liệu sql 8GB. Đã kiểm tra ổ cài đặt mysql của tôi. Không còn chỗ trống trong ổ đĩa. Vì vậy, có một số không gian bằng cách loại bỏ các mục không mong muốn và chạy lại lệnh nhập cơ sở dữ liệu của tôi. Lần này nó đã thành công.


7

Nếu bạn sử dụng NDBCLUSTER làm công cụ lưu trữ, bạn nên tăng DataMemoryIndexMemory.

Mysql FQA


6

Trừ khi bạn bật innodb_file_per_tabletùy chọn, InnoDBgiữ tất cả dữ liệu trong một tệp, thường được gọi là ibdata1.

Kiểm tra kích thước của tệp đó và kiểm tra xem bạn có đủ dung lượng đĩa trong ổ đĩa mà tệp đó nằm không.


5

chúng tôi đã có: SQLSTATE [HY000]: Lỗi chung: 1114 Bảng 'catalog_product_index_price_bundle_sel_tmp' đã đầy

giải quyết bởi:

chỉnh sửa cấu hình của db:

nano /etc/my.cnf

tmp_table_size = 256 triệu max_heap_table_size = 256 triệu

  • khởi động lại db

1
Các cài đặt 512M đó rất nguy hiểm. Chúng kiểm soát kích thước bộ nhớ tối đa cho các bảng tạm thời trong các lựa chọn phức tạp. Nó không chỉ là "mỗi kết nối", mà còn là "mỗi bảng tmp". Vì vậy, những giá trị đó có thể dễ dàng khiến bạn hết RAM.
Rick James,

4

Để trích dẫn các Tài liệu MySQL.

Công cụ lưu trữ InnoDB duy trì các bảng InnoDB trong một không gian bảng có thể được tạo từ một số tệp. Điều này cho phép một bảng vượt quá kích thước tệp riêng lẻ tối đa. Không gian bảng có thể bao gồm các phân vùng đĩa thô, cho phép các bảng cực kỳ lớn. Kích thước vùng bảng tối đa là 64TB.

Nếu bạn đang sử dụng bảng InnoDB và hết chỗ trong không gian bảng InnoDB. Trong trường hợp này, giải pháp là mở rộng không gian bảng InnoDB. Xem Phần 13.2.5, [“Thêm, xóa hoặc thay đổi kích thước tệp nhật ký và dữ liệu InnoDB”.]


4

trong trường hợp của tôi, đó chỉ là do máy chủ mysql chạy cùng với một ứng dụng, người viết quá nhiều nhật ký khiến đĩa bị đầy.

bạn có thể kiểm tra xem đĩa có đủ dung lượng sử dụng không

df -h

nếu phần trăm sử dụng đĩa là 100%, bạn có thể sử dụng lệnh này để tìm thư mục nào quá lớn

du -h -d 1 /

4

NGƯỜI DÙNG DOCKER: Điều này cũng xảy ra khi bạn đã đạt đến khoảng 90% giới hạn kích thước hình ảnh Docker của mình (có vẻ như cần 10% để lưu vào bộ nhớ đệm). Từ ngữ khó hiểu, vì điều này chỉ đơn giản có nghĩa là dung lượng ổ đĩa mà Docker có thể sử dụng cho mọi thứ về cơ bản.

Để khắc phục, hãy chuyển đến cài đặt màn hình Docker> Đĩa> di chuyển thanh trượt sang bên phải một chút> Áp dụng.

nhập mô tả hình ảnh ở đây


2

Trên CentOS 7 chỉ cần dừng và khởi động dịch vụ MySQL đã khắc phục điều này cho tôi.

sudo service mysql stop

sudo service mysql start


Kỳ lạ là điều này cũng làm việc cho tôi .... Không có bất kỳ phân vùng nào bị đầy hơn 80% và chỉ cần khởi động lại là đã khắc phục được.
n0nag0n

2

Tôi phải đối mặt với vấn đề tương tự vì không gian đĩa thấp. Và phân vùng lưu trữ tệp ibdata1 là không gian bảng hệ thống cho cơ sở hạ tầng InnoDB đã đầy.


2

Tôi đang gặp sự cố này ... trong trường hợp của tôi, tôi đã hết bộ nhớ trên máy chủ chuyên dụng của mình. Kiểm tra xem nếu mọi thứ khác không thành công và xem xét tăng dung lượng đĩa hoặc xóa dữ liệu hoặc tệp không mong muốn.


1

Trong trường hợp của tôi, bộ nhớ máy chủ đã đầy nên DB không thể ghi dữ liệu tạm thời. Để giải quyết nó, bạn chỉ cần tạo một số vị trí trên ổ đĩa của mình.


1

Tôi đã khắc phục sự cố này bằng cách tăng dung lượng bộ nhớ có sẵn cho máy ảo ảo nơi đặt cơ sở dữ liệu.


1

Trong trường hợp của tôi, tôi đang cố gắng chạy một lệnh bảng thay đổi và dung lượng đĩa có sẵn nhỏ hơn kích thước của bảng. Sau khi tôi tăng dung lượng ổ đĩa, sự cố đã biến mất.



-1

Đây cũng có thể là giới hạn InnoDB cho số lượng giao dịch mở:

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

tại 1024 giao dịch, có bản ghi hoàn tác (như trong, chỉnh sửa bất kỳ dữ liệu nào), InnoDB sẽ không hoạt động


câu trả lời là cách ngày.
Evan Carroll
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.