InnoDB: Błąd: plik dziennika ./ib_logfile0 ma inny rozmiar

106

Właśnie dodałem następujące wiersze do pliku /etc/mysql/my.cnf po przekonwertowaniu jednej bazy danych na silnik InnoDB.

innodb_buffer_pool_size = 2560M
innodb_log_file_size    = 256M
innodb_log_buffer_size  = 8M
innodb_flush_log_at_trx_commit  = 2
innodb_thread_concurrency   = 16
innodb_flush_method = O_DIRECT

Ale powoduje błąd „Błąd 2013 (HY000) w wierszu 2: Utracono połączenie z serwerem MySQL podczas zapytania” podczas ponownego uruchamiania mysqld. A dziennik błędów mysql pokazuje, co następuje

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
100118 20:52:52 [ERROR] Plugin 'InnoDB' init function returned error.
100118 20:52:52 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
100118 20:52:52 [ERROR] Unknown/unsupported table type: InnoDB
100118 20:52:52 [ERROR] Aborting

Więc skomentowałem ten wiersz

# innodb_log_file_size  = 256M

I pomyślnie zrestartował mysql.

Zastanawiam się, co pokazał „5242880 bajtów pliku dziennika” w błędzie mysql? Jest to pierwsza baza danych silnika InnoDB na tym serwerze, więc kiedy i gdzie jest tworzony ten plik dziennika? W takim przypadku, jak mogę włączyć dyrektywę innodb_log_file_sile w pliku my.cnf?

EDYTOWAĆ

Próbowałem usunąć / var / lib / mysql / ib_logfile0 i zrestartować mysqld, ale nadal nie udało się. Teraz wyświetla w dzienniku błędów następujące informacje.

100118 21:27:11  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 256 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200
InnoDB: Error: log file ./ib_logfile1 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!

Rozkład

Działa teraz po usunięciu zarówno pliku ib_logfile0, jak i ib_logfile1 w katalogu / var / lib / mysql

Jacek
źródło

Odpowiedzi:

121

InnoDB jest szalenie wybredny w kwestii konfiguracji; jeśli coś jest nie tak, po prostu się podda i wróci do domu. Aby zmienić rozmiar pliku dziennika bez utraty danych:

  1. Cofnij wszelkie wprowadzone zmiany konfiguracji do rozmiaru pliku dziennika i ponownie uruchom MySQL.
  2. W działającym MySQL: SET GLOBAL innodb_fast_shutdown = 0;
  3. Zatrzymaj MySQL
  4. Wprowadź zmiany w konfiguracji do rozmiaru pliku dziennika.
  5. Usuń oba pliki dziennika.
  6. Uruchom MySQL. Będzie narzekać na brak plików dziennika, ale utworzy je i wszystko będzie dobrze.
womble
źródło
1
Cześć, dziękuję za odpowiedź. Wypróbowałem tę metodę, ale nadal nie udało się.
jack
44
Usunięcie zarówno pliku ib_logfile0, jak i ib_logfile1 rozwiązało problem.
Temnovit
1
I dla mnie. Dziękuję bardzo, mamy z powrotem naszą wiki!
Stephen Kennedy,
1
Ponieważ przenoszę nowo zainstalowaną bazę danych, pomijam krok 1-4 i zaczynam od 5 - i działa :)
Limbo Peng
Dzięki @Temnovit usunięcie tych 2 plików również załatwiło sprawę.
bashan