Domanda

Quindi sono abbastanza nuovo al tuning InnoDB. Sto lentamente cambiando le tabelle (ove necessario) da MyISAM a InnoDB. Ho circa 100MB a InnoDB, quindi ho aumentato la variabile innodb_buffer_pool_size a 128 MB:

mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)

Quando sono andato a cambiare il valore innodb_log_file_size (esempio my.cnf sulla configurazione di InnoDB di mysql pagina commenti per cambiare la dimensione del file di registro al 25% della dimensione del buffer Così ora il mio my.cnf aspetto:.

# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M

Quando ho riavviare il server, ottengo questo errore:

110216 09:48:41 InnoDB: Inizializzazione pool di buffer, size = 128.0M
110216 09:48:41 InnoDB: l'inizializzazione Completato di tampone piscina case InnoDB: file di log ./ib_logfile0 è di diversa dimensione 0 5.242.880 byte
: Errore InnoDB: quanto specificato nel file .cnf 0 33.554.432 byte
110216 09:48:41 [ERRORE] errore riscontrato funzione init Plugin 'InnoDB'.
110216 09:48:41 registrazione [ERRORE] Plugin 'InnoDB' come un motore di archiviazione non riuscita.

Quindi la mia domanda: E 'sicuro per eliminare i vecchi log_files, o c'è un altro metodo per modificare la variabile innodb_log_file_size

?
È stato utile?

Soluzione

Si è sicuro di eliminare il file di registro, una volta mysqld è stato arrestato

Alla luce di questo, basta eseguire le seguenti operazioni:

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start

Messa in mysqld ricreerà ib_logfile0 e ib_logfile1

fare un tentativo !!!

UPDATE 2011-10-20 16:40 EDT

E 'pagina in modo pulito fuori tutti i dati nel buffer InnoDB piscina prima di rifare i file di registro, è necessario impostare questa opzione circa 1 ora prima dello spegnimento:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

Per impostazione predefinita, innodb_max_dirty_pages_pct è 75 (MySQL 5.5 +) o 90 (prima MySQL 5.5). L'impostazione di questo a zero mantiene il numero di pagine sporche sotto l'1% del InnoDB buffer Pool. L'esecuzione service mysql stop fa questo comunque. Inoltre, lo spegnimento sarà finire le rimanenti voci del redo log. Per mantenere a questa opzione solo per inserirlo /etc/my.cnf:

[mysqld]
innodb_max_dirty_pages_pct = 0

UPDATE 2013/04/19 16:16 EDT

Ho aggiornato la mia risposta un po 'più con innodb_fast_shutdown perché ho usato per riavviare mysql e fermata mysql per fare questo. Ora, questo passo è fondamentale, perché ogni transazione senza commit può avere altre parti in movimento all'interno e all'esterno del InnoDB log delle transazioni ( Vedere InnoDB infrastrutture ).

Si noti che l'impostazione innodb_fast_shutdown per 2 sarebbe ripulire i tronchi fuori così, ma ancora esistono parti in movimento e viene raccolto su Crash Recovery durante l'avvio di mysqld. L'impostazione di 0 è la cosa migliore.

Altri suggerimenti

mi sento di raccomandare invece il metodo ufficiale , che riporto qui per comodità:

Per modificare il numero o le dimensioni dei file di log InnoDB in MySQL 5.6.7 o in precedenza , utilizzare le seguenti istruzioni. La procedura per l'utilizzo dipende sul valore di innodb_fast_shutdown, che determina se o no per portare la tabella del sistema pienamente aggiornato prima un arresto Funzionamento:

  • Se innodb_fast_shutdown non è impostato su 2: Arrestare il server MySQL e assicurarsi che si spegne senza errori, al fine di garantire che non v'è Nessuna informazione per le transazioni in sospeso nel redo log. copiare il vecchi redo log file in un luogo sicuro, nel caso in cui qualcosa è andato storto durante l'arresto ed è necessario a recuperare lo spazio tabella. Eliminare i vecchi file di log dalla directory del file di registro, modificare my.cnf a cambiare la configurazione del file di registro, e avviare nuovamente il server MySQL. mysqld vede che non esistono i file di log InnoDB all'avvio e crea nuovi quelli.

  • Se innodb_fast_shutdown è impostato su 2: Set innodb_fast_shutdown a 1:

mysql> SET GLOBAL innodb_fast_shutdown = 1;

Poi seguire le istruzioni nella voce precedente.

A partire da MySQL 5.6.8 , l'impostazione innodb_fast_shutdown non è più rilevante quando si cambia il numero o le dimensioni dei file di log InnoDB. i file di log vecchi rimuovere Inoltre, non è più necessario, anche se si può ancora voglia di copiare i vecchi file di log in un posto sicuro, come backup. Per modificare il numero o le dimensioni dei file di log di InnoDB, eseguire le seguenti operazioni:

  1. Arrestare il server MySQL e fare in modo che si spegne senza errori.

  2. Modifica my.cnf per cambiare la configurazione del file di registro. Per modificare il registro dimensione del file, configurare innodb_log_file_size. Per aumentare il numero di i file di log, configurare innodb_log_files_in_group.

  3. Avviare il server MySQL di nuovo.

Se InnoDB rileva che differisce innodb_log_file_size da rifare log dimensione del file, si scriverà un posto di blocco di registro, chiudere e rimuovere il vecchi file di log, creare nuovi file di registro con le dimensioni richieste, e aperto i file di registro nuovo.

innodb_buffer_pool_size -. Semplicemente cambiamento my.cnf (my.ini) e riavviare mysqld

innodb_log_file_size è meno critica. Non cambiare a meno che non ci sia un motivo per farlo. Roland previsto i passaggi , ma un aspetto mi preoccupa ... io non so se i primi due passi sono importanti; sembra come potrebbero essere:

  1. set innodb_fast_shutdown = OFF
  2. restart mysql
  3. fermata mysql
  4. rimuovere i file di log
  5. avviare mysql

I file di registro tenere traccia di lavoro incompiuto; " innodb_fast_shutdown " dice a deal con quella roba dopo il riavvio. Quindi, la rimozione dei file può perdere informazioni?

Le nuove versioni hanno migliorato le cose: (discussione più Commenti)

  • 5.6 Consente innodb_log_file_size> 4GB
  • 5.6 innodb_log_file_size può essere modificata senza prima rimuovere * iBlog
  • 5.7 consente per il ridimensionamento dinamico innodb_buffer_pool_size

Devo cambiare log_file_size?

Usa GLOBAL STATUS per calcolare il numero di minuti prima che i cicli di log.

Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`

Se è molto più meno di 60 (minuti), allora potrebbe contribuire ad aumentare log_file_size. Se si tratta di molto di più, allora i file di registro sono spreco di spazio su disco. Quel "1 ora" è piuttosto arbitrario, quindi se siete vicino ad esso, non si preoccupano di cambiare il log_file_size.

Lasciare innodb_log_files_in_group sul valore predefinito di 2.

Quando si accede a MySQL digitare questi comandi:

pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G

Si otterrà due numeri. In primo luogo si ottiene uno e poi attendere un minuto. Otterrete un altro.

Say il primo è 3.456.718.123 e la seconda è 4.098.873.134

Ora (4.098.873.134-3.856.718.123) * 60/1024/1024

Il risultato è = 13,856 MB

Hai due file di log. Così divive esso per due e si otterrà un numero vicino a 7.000 MB. Giusto per essere sicuri, impostare la dimensione del file di registro 8GB

chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && servizio mysql restart || servizio mysql restart

Provalo, garantito per lavorare [testati su Debian 6]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top