Śledzę to rozwiązanie tutaj /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 i próbowałem zwiększyć moje innodb_buffer_pool_size
do 4G, a później 1G (również 1024M) w oprócz rozmiaru pliku dziennika, ale mysql nie rozpocznie się od tych wartości. Jeśli przywrócę to do 512M, mysql zaczyna działać dobrze.
Jak mogę to rozwiązać? Mój serwer ma 16 GB i zgodnie z sysinfo Webmina:
Real memory 15.62 GB total, 3.13 GB used
Tymczasem znalazłem również dziennik błędów:
120529 10:29:32 mysqld_safe mysqld z pliku pid /var/run/mysqld/mysqld.pid zakończony
120529 10:29:33 mysqld_safe Uruchamianie demona mysqld z bazami danych z / var / lib / mysql
120529 10:29:33 [Uwaga] Wtyczka „FEDERATED” jest wyłączona.
120529 10:29:33 InnoDB: Sterty pamięci InnoDB są wyłączone
120529 10:29:33 InnoDB: Muteksy i rw_locki używają atomowych wbudowań GCC
120529 10:29:33 InnoDB: Skompresowane tabele używają zlib 1.2.3
120529 10:29:33 InnoDB: Korzystanie z natywnego interfejsu AIO systemu Linux
120529 10:29:33 InnoDB: Inicjowanie puli buforów, rozmiar = 1,0G
120529 10:29:33 InnoDB: Zakończono inicjalizację puli buforów
InnoDB: Błąd: plik dziennika ./ib_logfile0 ma inny rozmiar 0 134217728 bajtów
InnoDB: niż podano w pliku .cnf 0 268435456 bajtów!
Odpowiedzi:
Dwie odpowiedzi udzielone przez @RickJames i @drogart są w zasadzie środkami zaradczymi. (+1 za każdy).
Bezpośrednio z prezentowanego dziennika błędów ostatnie dwa wiersze mówią:
W tym momencie było oczywiste, że ustawiłeś rozmiar pliku dziennika_wpisu_do_pliku na 256 mln (268435456),
my.cnf
podczas gdy dzienniki transakcji InnoDB (ib_logfile0
,ib_logfile1
) wynosiły odpowiednio 128 mln (134217728). Patrząc wstecz na link do mojej odpowiedzi StackOverflow w swoim pytaniu, musiałeś wykonać następujące czynności:Krok 01) Dodaj to do
my.cnf
:Krok 02) Uruchom te polecenie w systemie operacyjnym
Aby mieć pewność, co się dzieje, uruchom
tail -f
dziennik błędów. Zobaczysz komunikat informujący, kiedy tworzony jest każdy plik dziennika innodb.źródło
service mysqld stop
.Na podstawie błędu w dzienniku zgaduję, że to zrobiłeś:
Jeśli zmienisz rozmiar pliku dziennika, musisz usunąć stare pliki dziennika. Innodb nie uruchomi się pomyślnie, jeśli istniejące pliki nie pasują do określonego rozmiaru w pliku konfiguracyjnym. Jeśli przeniesiesz je w inne miejsce, innodb utworzy nowe pliki dziennika transakcji o odpowiednim rozmiarze podczas uruchamiania.
Zalecam przeniesienie starych plików do innego katalogu zamiast ich usuwania, dopóki serwer nie uruchomi się z nowymi plikami dziennika i wszystko będzie wyglądało OK.
źródło
Pula_ buforów powinna być ustawiona na około 70% dostępnej pamięci RAM, jeśli używasz tylko InnoDB.
Rozmiar kłody nie ma większego znaczenia. Optymalne jest ustawienie go w taki sposób, aby (Uptime * innodb_log_file_sile / Innodb_os_log_written) wynosił około 3600 (1 godzina).
Aby zmienić rozmiar dziennika, należy
źródło
W wartości podanej dla wielkości puli buforów może również występować problem . tak jak stało się w moim przypadku ...
Podczas zwiększania lub zmniejszania
innodb_buffer_pool_size
operacja jest wykonywana w porcjach. Rozmiar porcji jest definiowany przezinnodb_buffer_pool_chunk_size
opcję konfiguracji, która ma domyślnie 128M. Aby uzyskać więcej informacji, zobacz Konfigurowanie rozmiaru porcji puli buforów InnoDB .Rozmiar puli buforów musi zawsze być równy lub wielokrotność
innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
. Jeśli skonfigurujeszinnodb_buffer_pool_size
wartość, która nie jest równa lub wielokrotnośćinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
, wielkość puli buforów jest automatycznie dostosowywana do wartości, która jest równa lub jej wielokrotnośćinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
nie jest mniejsza niż określony rozmiar puli buforów.W tym przykładzie
innodb_buffer_pool_size
jest ustawiony na 8G iinnodb_buffer_pool_instances
jest ustawiony na 16.innodb_buffer_pool_chunk_size
to 128M, co jest wartością domyślną.8G jest prawidłową
innodb_buffer_pool_size
wartością, ponieważ 8G jest wielokrotnościąinnodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M
, czyli 2G.źródło