2011-11-13 13 views
5

To działało do tej pory, ale po ponownym uruchomieniu usługi baza danych utraciła wartość auto-inkrementacji dla mojej tabeli. To na pewno coś, co robię z moimi zapytaniami, ponieważ ostatnio nie zmodyfikowałem moich tabel. Co to mogło być?Automatyczny przyrost zostaje zresetowany do 0 przy każdym ponownym uruchomieniu usługi

+0

uzyskać listę wszystkich procedur przechowywanych i wyzwalaczy, które masz na swoim DB. Sprawdź, czy jest coś podejrzanego. Spróbuj ponownie zainstalować serwer, jeśli to pomoże –

+0

bez wyzwalaczy, bez procedur, zdarza się tylko przy ponownym uruchomieniu usługi, działa idealnie, jeśli skracam stół i zacznę od nowa. – Chobeat

+0

Po restarcie usługi masz na myśli ponowne uruchomienie serwera mysql? – Dimme

Odpowiedz

2

To jest udokumentowane zachowanie, to nie jest błąd.
Po uruchomieniu serwera przechodzi przez każdą z tabel (InnoDB) określając, jaka powinna być nowa wartość auto_increment. Od http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html:

InnoDB używa automatycznego licznika in-memory tak długo, jak działa serwer. Po zatrzymaniu i ponownym uruchomieniu serwera InnoDB ponownie inicjuje licznik dla każdej tabeli dla INSERT do tabeli, jak opisano wcześniej.

Czyni coś podobnego podczas wdrażania DDL powodujący stół odbudować, takich jak zmiany engine - nawet go modyfikacjom na tę samą wartość to było wcześniej.

+0

To nie wyjaśnia, dlaczego miałoby to być zero. –

0

ALTER TABLE ENGINE = MyISAM table_name

pracuje dla mnie. InnoDB przechowuje AI w pamięci, więc resetuje się do bieżącej liczby wierszy + 1, gdy serwer mysql zostanie zrestartowany. Jeśli więc twoja tabela jest pusta po ponownym uruchomieniu serwera, zostanie ona zresetowana do 1.

MyISAM z drugiej strony był dobrze zbudowany.

Powiązane problemy