mysql non si avvia dopo aver aumentato innodb_buffer_pool_size e innodb_log_file_size


18

Sto seguendo questa soluzione qui /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 e ho cercato di aumentare il mio innodb_buffer_pool_size4G e successivamente 1G (anche 1024M) in Oltre alle dimensioni del file di registro, ma mysql non inizierà con questi valori. Se lo rimetto a 512M mysql inizia bene.

Come posso risolvere questo? Il mio server è da 16 GB e secondo Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Nel frattempo ho trovato anche il registro degli errori:

120529 10:29:32 mysqld_safe mysqld dal file pid /var/run/mysqld/mysqld.pid terminato

120529 10:29:33 mysqld_safe Avvio del demone mysqld con database da / var / lib / mysql

120529 10:29:33 [Nota] Il plug-in 'FEDERATED' è disabilitato.

120529 10:29:33 InnoDB: l'heap di memoria di InnoDB è disabilitato

120529 10:29:33 InnoDB: mutex e rw_locks usano i builtin atomici GCC

120529 10:29:33 InnoDB: le tabelle compresse usano zlib 1.2.3

120529 10:29:33 InnoDB: utilizzo dell'AIO nativo di Linux

120529 10:29:33 InnoDB: inizializzazione pool buffer, dimensione = 1.0G

120529 10:29:33 InnoDB: inizializzazione completata del pool di buffer

InnoDB: errore: il file di registro ./ib_logfile0 ha dimensioni diverse 0 134217728 byte

InnoDB: rispetto a quanto specificato nel file .cnf 0 268435456 byte!


Puoi per favore condividere i log degli errori per questo ...
Abdul Manaf,

Grazie, sono riuscito a trovarlo. Penso che questo sarà più facile. Inizialmente avrei dovuto aggiungere anche che ho aumentato le dimensioni del file di registro per adattarlo all'aumento del pool di buffer (ho aggiunto queste informazioni ora).
giorgio79,

Ok @ giorgio79 ...
Abdul Manaf,

Prova a eliminare i file di registro.
dezso

Hai eliminato prima le dimensioni del file di registro? hai prima lasciato cadere tutti i database? Per favore aggiungi maggiori informazioni su cosa hai fatto esattamente?
ALH,

Risposte:


19

Le due risposte fornite da @RickJames e @drogart sono essenzialmente i rimedi. (+1 per ciascuno).

Proprio dal registro degli errori che presenti, le ultime due righe dicono:

InnoDB: errore: il file di registro ./ib_logfile0 ha dimensioni diverse 0 134217728 byte

InnoDB: rispetto a quanto specificato nel file .cnf 0 268435456 byte! `

A quel punto, era evidente che hai impostato innodb_log_file_size su 256M (268435456) my.cnfmentre i registri delle transazioni InnoDB ( ib_logfile0, ib_logfile1) erano rispettivamente 128M (134217728) ciascuno. Guardando indietro al link alla mia risposta StackOverflow nella tua domanda, hai dovuto fare quanto segue:

Step 01) Aggiungi questo a my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Passaggio 02) Eseguire questi comandi nel sistema operativo

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Per avere fiducia in ciò che sta accadendo, eseguire tail -fcontro il registro degli errori. Vedrai un messaggio che ti dice quando viene creato ciascun file di registro innodb.


Grazie, sì, non li ho eliminati prima. Volevo solo vedere come si comporta mysql. Dopo aver eseguito il passaggio 3, il riavvio ha funzionato.
giorgio79,

1
Penso che uno non dovrebbe eliminare i file di registro, ma piuttosto spostarli altrove ed eliminarli un po 'più tardi quando hai modificato con successo la dimensione del file di registro. Altrimenti, saresti nei guai se MySQL si bloccasse prima di correre service mysqld stop.
KajMagnus,

4

Sulla base dell'errore nel registro, immagino tu abbia fatto questo:

  • spegni mysql
  • modificato my.cnf per modificare le dimensioni del file di registro innodb
  • ha provato ad avviare mysql (poi non è riuscito)

Se si modificano le dimensioni del file di registro, è necessario rimuovere i vecchi file di registro. Innodb non si avvierà correttamente se i file esistenti non corrispondono alla dimensione specificata nel file di configurazione. Se li sposti altrove, innodb creerà nuovi file di registro delle transazioni della dimensione corretta all'avvio.

Consiglierei di spostare i vecchi file in un'altra directory invece di eliminarli, fino a quando il server è attivo e funzionante con nuovi file di registro e tutto sembra a posto.


3

Buffer_pool dovrebbe essere impostato su circa il 70% della RAM disponibile se si esegue solo InnoDB.

Le dimensioni del registro non contano molto. L'ottimale è di impostarlo in modo che (Uptime * innodb_log_file_size / Innodb_os_log_written) sia all'incirca 3600 (1 ora).

Per modificare la dimensione del registro, è necessario

  1. spegni mysqld in modo pulito
  2. elimina il valore in my.cnf (my.ini)
  3. elimina i file di registro
  4. riavvio: i nuovi file di registro verranno ricostruiti.

Grazie, sì, anche questa è una risposta corretta. Potrei accettarne solo uno però. + 1d anche questo.
giorgio79,

1

Potrebbe esserci anche qualche problema nel valore fornito per la dimensione del pool di buffer . come è successo nel mio caso ...

Quando si aumenta o diminuisce innodb_buffer_pool_size, l'operazione viene eseguita in blocchi. La dimensione del blocco è definita innodb_buffer_pool_chunk_sizedall'opzione di configurazione, che ha un valore predefinito di 128 MB. Per ulteriori informazioni, consultare Configurazione della dimensione del blocco del pool di buffer InnoDB .

La dimensione del pool di buffer deve essere sempre uguale o multiplo di innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Se si configura innodb_buffer_pool_sizeun valore diverso o multiplo innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, la dimensione del pool di buffer viene regolata automaticamente su un valore uguale o multiplo innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesnon inferiore alla dimensione del pool di buffer specificato.

Nell'esempio, innodb_buffer_pool_sizeè impostato su 8G ed innodb_buffer_pool_instancesè impostato su 16. innodb_buffer_pool_chunk_sizeè 128M, che è il valore predefinito.

8G è un innodb_buffer_pool_sizevalore valido perché 8G è un multiplo di innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, che è 2G.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.