Więc jestem całkiem nowy w tuningu InnoDB. Powoli zmieniam tabele (w razie potrzeby) z MyIsam na InnoDB. Mam około 100 MB w innodb, więc zwiększyłem innodb_buffer_pool_size
zmienną do 128 MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Kiedy poszedłem zmienić innodb_log_file_size
wartość (przykład my.cnf na stronie konfiguracji innodb mysql komentuje, aby zmienić rozmiar pliku dziennika na 25% wielkości bufora. Teraz mój plik my.cnf wygląda następująco:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Po ponownym uruchomieniu serwera pojawia się ten błąd:
110216 9:48:41 InnoDB: Inicjalizacja puli buforów, rozmiar = 128.0M
110216 9:48:41 InnoDB: Zakończona inicjalizacja puli buforów
InnoDB: Błąd: plik dziennika ./ib_logfile0 ma inny rozmiar 0 5242880 bajtów
InnoDB: niż określono w plik .cnf 0 33554432 bajtów!
110216 9:48:41 [BŁĄD] Funkcja inicjująca wtyczki „InnoDB” zwróciła błąd.
110216 9:48:41 [BŁĄD] Rejestracja wtyczki „InnoDB” nie powiodła się.
Więc moje pytanie: czy bezpiecznie jest usunąć stare log_files, czy też istnieje inna metoda zmiany innodb_log_file_size
zmiennej?
Odpowiedzi:
Tak, można bezpiecznie usunąć plik dziennika po zamknięciu mysqld
W świetle tego wystarczy wykonać następujące czynności:
Uruchomienie mysqld odtworzy
ib_logfile0
iib_logfile1
Spróbuj !!!
AKTUALIZACJA 2011-10-20 16:40 EDT
Czyści strony wszystkich danych w puli buforów InnoDB przed ponownym wykonaniem plików dziennika, należy ustawić tę opcję na około godzinę przed wyłączeniem:
Domyślnie innodb_max_dirty_pages_pct to 75 (MySQL 5.5+) lub 90 (przed MySQL 5.5). Ustawienie wartości zero powoduje, że liczba brudnych stron jest mniejsza niż 1% puli buforów InnoDB. Performing
service mysql stop
i tak to robi. Ponadto zamknięcie zakończy wszystkie pozostałe elementy w dzienniku ponownych operacji. Aby zachować tę opcję, po prostu dodaj ją do /etc/my.cnf:AKTUALIZACJA 2013-04-19 16:16 EDT
Trochę zaktualizowałem swoją odpowiedź za pomocą innodb_fast_shutdown, ponieważ kiedyś zrestartowałem mysql i zatrzymałem mysql, aby to zrobić. Teraz ten jeden krok jest niezbędny, ponieważ każda niezatwierdzona transakcja może zawierać inne ruchome części w dziennikach transakcji InnoDB i poza nimi ( patrz Infrastruktura InnoDB ).
Należy pamiętać, że ustawienie innodb_fast_shutdown na 2 również wyczyści dzienniki, ale więcej ruchomych części nadal istnieje i zostanie wybranych podczas odzyskiwania po awarii podczas uruchamiania mysqld. Ustawienie 0 jest najlepsze.
źródło
SET GLOBAL innodb_fast_shutdown = 0;
. Gdy MySQL zamyka się, wszystko transakcyjne jest usuwane ze wszystkich ruchomych części, w tym dzienników ponownych (ib_logfile0 i ib_logfile1). Można je zatrzymać. Mam jeszcze problemy z całkowicie opróżnionymi logami.Zamiast tego poleciłbym oficjalną metodę , którą tutaj odtwarzam dla wygody:
źródło
innodb_buffer_pool_size
- wystarczy zmienićmy.cnf
(my.ini
) i zrestartować mysqld.innodb_log_file_size
jest mniej krytyczny. Nie zmieniaj go, chyba że istnieje ku temu powód. Roland podał kroki , ale martwi mnie jeden aspekt ... Nie wiem, czy pierwsze dwa kroki są ważne; wygląda na to, że mogą to być:set innodb_fast_shutdown = OFF
Pliki dziennika śledzą niedokończone sprawy; „
innodb_fast_shutdown
” mówi, aby poradzić sobie z tymi problemami po ponownym uruchomieniu. Czy usunięcie plików może spowodować utratę informacji?Nowe wersje poprawiły: (więcej dyskusji w komentarzach)
innodb_log_file_size
> 4 GBinnodb_log_file_size
można zmienić bez uprzedniego usunięcia iblog *innodb_buffer_pool_size
Czy powinienem zmienić log_file_size?
Służy
GLOBAL STATUS
do obliczania liczby minut poprzedzających cykle dziennika.Jeśli jest to znacznie mniej niż 60 (minuty), może pomóc zwiększyć rozmiar_pliku_logu. Jeśli jest to znacznie więcej, pliki dziennika marnują miejsce na dysku. Ta „1 godzina” jest raczej dowolna, więc jeśli jesteś blisko niej, nie zawracaj sobie głowy zmienianiem rozmiaru pliku_logu.
Pozostaw
innodb_log_files_in_group
domyślnie 2.źródło
--skip-networking
celu uniknięcia tych zmian w ostatniej chwili. Twój pierwszy wiersz (set innodb_fast_shutdown = OFF) eliminuje to. +1 !!!innodb_log_file_size
została wzmocniona, aby umożliwić zmianę go bez zdejmowania iblog plików.Po zalogowaniu się do mysql wpisz następujące polecenia:
Otrzymasz dwie liczby. Najpierw dostaniesz jeden, a następnie poczekaj minutę. Dostaniesz inny.
Powiedzmy, że pierwszy to 3.456.718.123, a drugi to 4.098.873.134
Teraz (4.098.873.134-3.856.718.123) * 60/1024/1024
Wynik to = 13,856 MB
Masz dwa pliki dziennika. Podziel go przez dwa, a otrzymasz liczbę blisko 7 000 MB. Dla pewności ustaw rozmiar pliku dziennika na 8 GB
źródło
Log File Size
w dba.stackexchange.com/questions/23189/... )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || usługa mysql restart
Wypróbuj, na pewno działa [testowany na Debianie 6]
źródło