Próbuję dodać wiersz do InnoDB
tabeli za pomocą prostego zapytania:
INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');
Ale kiedy próbuję wykonać to zapytanie, otrzymuję następujące informacje:
ERROR 1114 (HY000): Stół
zip_codes
jest pełny
Robiąc
SELECT COUNT(*) FROM zip_codes
daje mi 188 959 wierszy, co nie wydaje się zbyt wiele, biorąc pod uwagę, że mam inną tabelę z 810 635 wierszami w tej samej bazie danych.
Jestem dość niedoświadczony InnoDB engine
i nigdy nie doświadczyłem tego problemu MyISAM
. Jakie są tutaj potencjalne problemy?
EDYCJA: występuje tylko podczas dodawania wiersza do zip_codes
tabeli.
Odpowiedzi:
EDYCJA: Najpierw sprawdź, czy nie zabrakło miejsca na dysku, przed rozwiązaniem problemu związanego z konfiguracją.
Wydaje się, że masz zbyt niski maksymalny rozmiar dla twojego
innodb_data_file_path
wmy.cnf
tym przykładzienie można przechowywać więcej niż 512 MB danych we wszystkich tabelach innodb łącznie.
Może powinieneś przełączyć się na schemat innodb-per-table za pomocą
innodb_file_per_table
.źródło
/etc/mysql/
i jest częściowo podzielony na dodatkowe pliki w/etc/mysql/conf.d
innodb_data_file_path
linii/etc/mysql/mysql.conf.d/mysqld.cnf
i ponownym uruchomieniu usługmysql
iapache2
Innym możliwym powodem jest to, że partycja jest pełna - tak właśnie stało się teraz.
źródło
df -h
do sprawdzenia rozmiaru dyskuOtrzymasz również ten sam błąd ERROR 1114 (HY000): Tabela '# sql-310a_8867d7f' jest pełna
jeśli spróbujesz dodać indeks do tabeli, która korzysta z mechanizmu pamięci masowej MEMORY.
źródło
ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);
działało.Musisz zmodyfikować limit limitu ustawiony w my.cnf dla tabel INNO_DB. Ten limit pamięci nie jest ustawiony dla pojedynczych tabel, jest ustawiony dla wszystkich tabel łącznie.
Jeśli chcesz, aby pamięć automatycznie rozszerzała się do 512 MB
Jeśli nie znasz limitu lub nie chcesz nakładać limitu, możesz go zmodyfikować w ten sposób
źródło
Ten błąd pojawia się również, gdy partycja, na której się
tmpdir
znajduje, zapełnia się (z powodu zmiany tabeli lub innejźródło
W moim przypadku było tak, ponieważ partycja, na której znajduje się plik ibdata1, była pełna.
źródło
Może zabraknąć miejsca na partycji, na której przechowywane są tabele mysql (zwykle / var / lib / mysql) lub w miejscu, w którym przechowywane są tabele tymczasowe (zwykle / tmp).
Możesz chcieć: - monitorować wolne miejsce podczas tworzenia indeksu. - skieruj zmienną tmpdir MySQL w inne miejsce. Wymaga to ponownego uruchomienia serwera.
źródło
Ja też napotkałem ten błąd podczas importowania pliku bazy danych sql o pojemności 8 GB. Sprawdziłem mój dysk instalacyjny mysql. Na dysku nie było wolnego miejsca. Zrobiłem więc trochę miejsca, usuwając niechciane elementy i ponownie uruchomiłem polecenie importu bazy danych. Tym razem się udało.
źródło
Jeśli używasz NDBCLUSTER jako mechanizmu przechowywania, powinieneś zwiększyć
DataMemory
iIndexMemory
.Mysql FQA
źródło
O ile nie włączysz
innodb_file_per_table
opcji,InnoDB
wszystkie dane są przechowywane w jednym pliku, zwykle o nazwieibdata1
.Sprawdź rozmiar tego pliku i sprawdź, czy masz wystarczającą ilość miejsca na dysku, na którym się znajduje.
źródło
mieliśmy: SQLSTATE [HY000]: Błąd ogólny: 1114 Tabela „catalog_product_index_price_bundle_sel_tmp” jest pełna
rozwiązany przez:
edytuj konfigurację db:
nano /etc/my.cnf
tmp_table_size = 256 mln max_heap_table_size = 256 mln
źródło
Cytując dokumenty MySQL.
źródło
w moim przypadku tylko dlatego, że serwer mysql działa razem z aplikacją, która zapisuje zbyt wiele logów, że dysk jest pełny.
możesz sprawdzić, czy na dysku jest wystarczająco dużo miejsca
jeśli procent użycia dysku wynosi 100%, możesz użyć tego polecenia, aby sprawdzić, który katalog jest za duży
źródło
UŻYTKOWNICY DOCKERA: Dzieje się tak również, gdy przekroczysz około 90% limitu rozmiaru obrazu Dockera (wydaje się, że 10% jest potrzebne do buforowania). Sformułowanie jest mylące, ponieważ oznacza to po prostu ilość miejsca na dysku, którą Docker może wykorzystać w zasadzie na wszystko.
Aby to naprawić, przejdź do ustawień pulpitu Docker> Dysk> przesuń suwak nieco bardziej w prawo> Zastosuj.
źródło
W CentOS 7 po prostu zatrzymanie i uruchomienie usługi MySQL naprawiło to za mnie.
sudo service mysql stop
sudo service mysql start
źródło
Napotkałem ten sam problem z powodu małej ilości miejsca na dysku. Partycja, na której znajduje się plik ibdata1, będący systemowym obszarem tabel dla infrastruktury InnoDB, była pełna.
źródło
Miałem ten problem ... w moim przypadku skończyło mi się miejsce na serwerze dedykowanym. Sprawdź, czy wszystko inne zawiedzie i rozważ zwiększenie miejsca na dysku lub usunięcie niechcianych danych lub plików.
źródło
W moim przypadku pamięć serwera była pełna, więc DB nie mógł zapisać danych tymczasowych. Aby go rozwiązać, wystarczy zrobić miejsce na dysku.
źródło
Rozwiązałem ten problem, zwiększając ilość pamięci dostępnej dla maszyny wirtualnej włóczęgi, na której znajdowała się baza danych.
źródło
W moim przypadku próbowałem uruchomić polecenie alter table i dostępne miejsce na dysku było mniejsze niż rozmiar tabeli. Kiedyś zwiększyłem miejsce na dysku, problem zniknął.
źródło
Ten dysk jest pełny w / var / www / mysql
źródło
Może to być również limit InnoDB dotyczący liczby otwartych transakcji:
http://bugs.mysql.com/bug.php?id=26590
źródło