To jest stare pytanie, ale właśnie dostałem to dzisiaj i znalazłem rozwiązanie (i tak, z errno =-1).
Nasza tabela to InnoDB i była tworzona i niszczona co kilka godzin. Niedawno uruchomiliśmy serwer podrzędny, który podąża za tym wzorcem. Używamy również opcji „innodb_file_per_table”.
Błąd wystąpiłby tylko na urządzeniu podrzędnym, a nie na urządzeniu nadrzędnym. Problem polegał na tym, że kilka godzin wcześniej zsynchronizowaliśmy to urządzenie podrzędne z urządzeniem nadrzędnym za pomocą rsync.
Rsync skopiował plik tabeli, ale w międzyczasie został usunięty przez mastera, ponieważ była to tabela tymczasowa. Plik .idb istniał więc w slave, ale już nie w master.
Kiedy master wysłał żądanie utworzenia tabeli, slave nie mógł, ponieważ plik już tam był. MySQL nie wiedział, że istnieje tabela, ponieważ metadane mówiły, że nie ma tabeli. Zakładam, że MySQL próbował utworzyć plik, ale ponieważ tam był, nie powiodło się.
W moim przypadku rozwiązaniem było usunięcie pliku .idb w innym folderze (oczywiście najpierw z kopią zapasową).
Następnie baza danych pozwoliłaby nam utworzyć tabelę, a urządzenie podrzędne ponownie podążyłoby za wzorcem
Lepszym sposobem na zrobienie tego rsync byłoby użycie opcji --delete w celu usunięcia wszelkich przestarzałych plików, które zniknęły z mastera.
W każdym razie - możesz nie mieć dokładnie takiej sytuacji, jak ta, którą opisałem, ale może to być po prostu przestarzały plik, który został tam z jakiegoś powodu.