2011-09-05 20 views
24

Recentemente, ho scoperto che posso massimizzare le prestazioni di mysql se ho un buon hardware. Dal momento che ho usato InnoDB ho aggiunto un'ulteriore configurazione in my.iniMotore tabella sconosciuto 'InnoDB'

Ecco le configurazioni appena aggiunti:

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 

Poi riavviare tutti i servizi. Ma quando ho usato il mio programma, si è verificato un errore "Unknown table engine 'InnoDB'".

Quello che ho cercato di risolvere questo problema:

  1. a cancellare il file di log al riavvio del servizio, ma ho ancora ottenuto l'errore.

risposta

11

Ho appena provato a eliminare il file di registro e riavviato i servizi, e funziona! Ma attenzione per assegnare 2G perché innodb potrebbe non essere compilato, utilizzare 1G se 2G non funziona.

+1

Questo è stato in/var/lib/mysql/per me (chroot-ndr), può anche essere trovato @/usr/local/mysql/data/ –

+0

un'altra possibile posizione del log è/mysqldb/logs/ – MarkHu

+2

è sufficiente eliminare il file di registro e riavviare mysql ha funzionato per me..Grazie – Sree

17

Altre soluzioni non hanno risolto il mio problema. Il motore InnoDB è stato disabilitato dopo aver regolato la configurazione.

Rimozione borked ib_ * log file nella directory dati di MySQL fisso il mio problema, e mi ha permesso di usare 2G pool di buffer per InnoDB: http://www.turnkeylinux.org/forum/support/20090111/drupal-6-problem-enable-innodb#comment-131

+0

Questo era il mio problema; shutdown mysql, cancella i file ib_logfile [01], riavvia mysql, tutto ok. – pdwalker

8

Ho eseguito in questo problema pure. Il problema era che stavo allocando più memoria a InnoDB rispetto al server con la variabile innodb_buffer_pool_size. MySQL non si lamentava di non essere in grado di allocare la memoria nei suoi registri su questo.

0

Si è verificato questo problema durante il ripristino dal backup. Il problema era che avevo un po 'di impostazioni diverse in my.ini. Quindi, nel caso qualcuno riscontri questo problema, assicurati di impostare le stesse impostazioni (copia my.ini), interrompi il servizio MySQL, quindi ripristina l'intera cartella di dati e quindi riavvia il servizio MySQL.

12

1.Controllare per vedere se si è InnoDB supporto abilitato:

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

2. Se il valore sottostante è disabilitato, allora si avrebbe bisogno di attivare InnoDB.

3. Aprire il file di configurazione di MySQL. Su varie piattaforme, il file di configurazione possono differire in nome del file e il percorso:

  • di Windows: $ MYSQL_INSTALL_DIRECTORY/my.ini

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

4. Se il parametro di saltare-innodbis esiste commentata /, poi basta lasciare un commento, fuori:

# skip-innodb 

5.Server server MySQL Shutdown, cancellare/rinominare i log di MySQL per aggiornare la registrazione dell'intero server e riavviare MySQL:

  • Linux:

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

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

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

  • Windows:

    Passare a $ MYSQL_INSTALL_DIRECTORY/data e cancellare/spostare i file di registro con il prefisso ib_logfile.

1

Un'altra opzione che si ottiene se si maneggia il file my.cnf completamente è di sostituirlo con una configurazione predefinita dall'installazione mysql lì. Per Linux:

Sono disponibili le seguenti opzioni,

/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 

Ecco un esempio per installarlo:

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

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

Maggiori informazioni su queste opzioni è disponibile presso http://dev.mysql.com/doc/mysql/en/option-files.html

4

ho provato tutti questi (e molti altri) ma l'unico metodo che ha funzionato per me è:

  • arresto MySql Server
    /etc/init.d/mysql stop
  • Eliminare i file di log
    rm ib_logfile0 ib_logfile1
  • rinominare il file InnoDB (se non altro funziona perché verrà ricreata) mv ibdata1 old_ibdata1
  • Ho questo file di configurazione nella /etc/mysql/my.cnf -> Anche se non lo si specifica, MySql utilizzerà i valori predefiniti.

    [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 
    
  • avviare MySQL Server
    /etc/init.d/mysql start

+0

sì, l'eliminazione dei file di log funziona sempre se le configurazioni sono tutte ok. – rechie

+0

hai appena salvato il futuro di un'intera azienda di hosting .... – spetsnaz

Problemi correlati