2011-09-05 18 views
24

Niedawno odkryłem, że mogę zmaksymalizować wydajność mysql, gdy mam dobry sprzęt. Ponieważ używam InnoDB I dodaje dodatkowej konfiguracji w my.iniNieznany silnik tabeli "InnoDB"

Oto nowo dodanego konfiguracje:

innodb_data_file_path = ibdata1:10M:autoextend 
innodb_buffer_pool_size = 2G 
innodb_additional_mem_pool_size = 2M 
innodb_log_file_size = 256M 
innodb_log_buffer_size = 8M 
innodb_flush_log_at_trx_commit = 1 
innodb_lock_wait_timeout = 120 

Potem ponowne uruchomienie wszystkich usług. Ale kiedy użyłem mojego programu, wystąpił błąd "Nieznany silnik tabeli" InnoDB "".

Co starałem się rozwiązać ten problem:

  1. usunąć plik dziennika ponownego uruchomienia usługi, ale nadal mam ten błąd.

Odpowiedz

11

Właśnie powtórzyłem usuwanie pliku logu i zrestartowałem usługi, i to działa! Ale uwaga na przydział 2G, ponieważ innodb może się nie skompilować, użyj 1G, jeśli 2G nie działa.

+1

Było to w/var/lib/mysql/dla mnie (chroot-DE), to można również znaleźć @/usr/local/mysql/data/ –

+0

Kolejną możliwą lokalizacją dziennika jest/mysqldb/logs/ – MarkHu

+2

po prostu usunięcie pliku log i ponowne uruchomienie mysql działało dla mnie .. Dzięki – Sree

17

Inne rozwiązania nie rozwiązały mojego problemu. Silnik InnoDB został wyłączony po dostosowaniu konfiguracji.

Usuwanie borked ib_ * pliki danych mysql reż zalogować ustalone mój problem, i pozwolił mi korzystać z puli buforów 2G dla InnoDB: http://www.turnkeylinux.org/forum/support/20090111/drupal-6-problem-enable-innodb#comment-131

+0

To był mój problem; zamknij mysql, usuń pliki ib_logfile [01], zrestartuj mysql, wszystko dobrze. – pdwalker

8

ja wpadłem na ten problem również. Problem polegał na tym, że przydzielałem więcej pamięci do InnoDB niż serwer miał zmienną innodb_buffer_pool_size. MySQL nie skarży się, że nie może przydzielić pamięci w swoich dziennikach na ten temat.

0

Miał ten problem podczas przywracania z kopii zapasowej. Problem polegał na tym, że miałem trochę inne ustawienia w my.ini. Na wypadek, gdyby ktoś dostał ten problem, po prostu ustaw te same ustawienia (skopiuj my.ini), zatrzymaj usługę MySQL, następnie przywróć cały folder danych, a następnie uruchom ponownie usługę MySQL.

12

1. Sprawdź, czy masz włączoną InnoDB wsparcia:

mysql> show variables like 'have_innodb'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| have_innodb | YES | 
+---------------+-------+ 
1 row in set (0.00 sec) 

2.Jeżeli wartości powyżej jest wyłączona, wtedy musiałby włączyć InnoDB.

3.Otwórz plik konfiguracyjny MySQL. Na różnych platformach, plik konfiguracyjny może się różnić w nazwę pliku i lokalizację:

  • Windows: $ MYSQL_INSTALL_DIRECTORY/my.ini

  • Linux/Unix: /etc/mysql/my.cnf

4.Jeżeli parametru skip-innodbis odkomentowane/istnieje, to tylko skomentować go:

# skip-innodb 

5.Serwer zamknięcie serwera MySQL, usuń/zmień dzienniki MySQL odświeżyć rejestrowanie całego serwera, a restart MySQL:

  • Linux:

    ~$: /etc/init.d/mysql stop

    ~$: rm /var/lib/mysql/ib_logfile*

    ~$: /etc/init.d/mysql start

  • Okna:

    Przejdź do $ MYSQL_INSTALL_DIRECTORY/data i usuń/przenieś pliki dziennika z przedrostkiem ib_logfile.

1

Inną opcją, którą masz, jeśli całkowicie zmapujesz plik my.cnf, jest zastąpienie go domyślną konfiguracją z zainstalowanej tam instalacji mysql. Dla Linux:

masz następujące opcje

/usr/share/mysql/my-huge.cnf 
/usr/share/mysql/my-innodb-heavy-4G.cnf 
/usr/share/mysql/my-large.cnf 
/usr/share/mysql/my-medium.cnf 
/usr/share/mysql/my-small.cnf 

Oto przykład, aby go zainstalować:

#backup original config 
mv /etc/my.cnf{,.bak} 

#copy new my.cnf from template 
cp /usr/share/mysql/my-large.cnf /etc/my.cnf 

Więcej informacji na temat tych opcji jest dostępna na http://dev.mysql.com/doc/mysql/en/option-files.html

4

Próbowałam wszystkie te (i wiele innych) ale dla mnie jedną metodą, która zadziałała dla mnie jest:

  • Zatrzymaj MySQL Server
    /etc/init.d/mysql stop
  • Usuń pliki dziennika
    rm ib_logfile0 ib_logfile1
  • zmienić nazwę pliku InnoDB (Jeżeli nic innego nie działa, ponieważ zostanie on odtworzony) mv ibdata1 old_ibdata1
  • mam to configs w /etc/mysql/my.cnf -> Nawet jeśli nie określisz tego, MySql użyje wartości domyślnych.

    [mysqld] 
    datadir=/data/mysql/data 
    socket=/var/run/mysqld/mysqld.sock 
    
    #Not a must to define the following 
    innodb_log_file_size=1G 
    innodb_file_per_table=1 
    innodb_flush_method=O_DIRECT 
    innodb_buffer_pool_size=1G 
    innodb_data_file_path=ibdata1:10M:autoextend 
    innodb_lock_wait_timeout=18000 
    
  • start MySQL Server
    /etc/init.d/mysql start

+0

tak, usuwanie plików logów działa cały czas, jeśli konfiguracje są w porządku. – rechie

+0

właśnie uratowałeś przyszłość firmy hostingowej .... – spetsnaz