Motore di archiviazione sconosciuto / non supportato: InnoDB | MySQL Ubuntu


45

Di recente ho eseguito l'aggiornamento dal precedente LTS Ubuntu a Precise e ora mysql si rifiuta di iniziare. Si lamenta di quanto segue quando provo ad avviarlo:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

E questo mostra in "/var/log/mysql/error.log":

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

Ho controllato i permessi su tutte le directory mysql per assicurarmi che avesse la proprietà e ho anche rinominato i precedenti ib_logs in modo da poterli rifare. Al momento non riesco a capire dove sia questo problema, dopo aver esaminato i risultati di Google per 2 ore.


Per inciso, ho fatto funzionare mysql commentando la voce "skip_innodb" in my.cnf. Ma sono abbastanza certo che non avrei dovuto risolverlo in quel modo.
Garrett,

Mostra tutte le variabili di my.cnf che sono impostazioni
innodb

Risposte:


34

Dopo aver controllato i log ho trovato il seguente errore:

[ERROR] Unknown/unsupported storage engine: InnoDB

Ho rimosso questi file:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

a /var/lib/mysql

Questo ha risolto il mio problema dopo il riavvio.


7
il rmcomando è usato per rimuovere i file piuttosto che rinominarli per quanto ne so ...
Itai Ganot

2
Tali file contengono i dati effettivi per il database. Non vuoi eliminarli.
Stefan Lasiewski,

No, il ibdatafile contiene i dati (a meno che non si disponga di file per tabella). I file ib_logfile sono i registri di riproduzione che contengono i dati per le transazioni che alterano il database che potrebbero essere state in corso quando / se il database si è bloccato. Se sei stato in grado di arrestare correttamente il server, l'eliminazione di questi file di registro non ti danneggerà. Se si è schiantato, allora ne hai bisogno. Ma questa è una risposta valida. Se il file my.cnf modifica l'opzione innodb_log_file_size e non corrisponde più a quei due file, verrà visualizzato il messaggio di errore che indica l'OP. L'eliminazione / spostamento in modo da poterne fare di nuovi risolve il problema.
Safado,

2
Il motivo per cui le modifiche possono essere apportate solo per 5 minuti è al di là di me ... Avrei dovuto dire che è una potenziale soluzione per l'errore sopra menzionato. Come affermato dal PO, non era la correzione di cui aveva bisogno.
Safado,

1
Puoi sempre rinominarli, ad es mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
Kenorb,

23

Se hai davvero bisogno skip-innodb(caso d'uso: ingombro di memoria ridotto), ovviamente non devi commentarlo. Tuttavia, se InnoDB è il motore di archiviazione predefinito, il server non si avvia fino a quando non viene indicato quale motore di archiviazione utilizzare, ad esempio default-storage-engine=myisamper MyISAM.

Quindi, prova questo:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam

6
Prova ad aggiungere "default-storage-engine = myisam" a /etc/mysql/my.cnf nella sezione [mysqld] se vuoi avere "skip_innodb".
codificato il

Funziona magnificamente. Saluti!
Boann,

4
Cosa succede se si desidera il supporto innodb?
Nilzor,

1
Mariadb su Centos 7 aggiunto default-storage-engine=myisamnel file /etc/my.cnf sotto [mysqld]. Questo ha funzionato. Thx
Damodar Bashyal

12

Se stai usando MySQL 5.6+ e vuoi disabilitare InnoDB, non dimenticare " --default-tmp-storage " o non funzionerà:

Per disabilitare InnoDB, usare --innodb = OFF o --skip-innodb. In questo caso, poiché il motore di archiviazione predefinito è InnoDB, il server non si avvierà a meno che non si utilizzi anche --default-storage-engine e --default-tmp-storage-engine per impostare il valore predefinito su un altro motore sia permanente che Tabelle temporanee.

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_ignore-builtin-innodb

Puoi aggiungerlo a my.cnf:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

solo per assicurarsi che funzionerà.


+1, non notare mai il documento ufficiale. dovrebbe impostare default-storage-enginee default-tmp-storage-engine, grazie.
Giberno,

7

Controlla il tuo log degli errori mysql.

tail -100 /var/log/mysql/error.log

Se il tuo registro dice (come il mio):

InnoDB: inizializzazione pool buffer, dimensione = 128,0M
InnoDB: mmap (137363456 byte) non riuscito; errno 12
[ERRORE] InnoDB: impossibile allocare memoria per il pool di buffer

Non hai memoria sufficiente per utilizzare la dimensione del buffer predefinita di 128M

Modifica il file di configurazione /etc/mysql/my.cnf aggiungendo una riga per specificare un innodb_buffer_pool_size più piccolo.

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

Salvare il file di configurazione e avviare mysql

sudo service mysql start

È perfetto qui. Ma potrebbero anche essere processi sospesi del server web o qualcosa che consuma la RAM, controlla anche quello.
sjas,

0

Prova altre 2 cose. 1. Ridurre la dimensione del pool di buffer innodb. 2. Modifica lo script iniziale di mysql e aggiungi l'opzione --innodb.

Mi chiedo anche se il tuo pacco è difettoso. Potresti provare una versione secondaria diversa?

Inoltre, suppongo che anche il tuo server mysql sia stato aggiornato? Forse quella versione è rotta? Preciso non è ancora definitivo.


L'ho già fatto, senza alcun risultato.
Garrett,

Ci dispiace, l'ho modificato con alcune cose da provare, più come un pessimo pacchetto. Prova a utilizzare la versione mysql.com o percona che di solito sono più stabili.
johnshen64,

Assicurati anche che il vecchio pacchetto sia completamente eliminato, quando il nuovo è installato.
johnshen64,

L'eliminazione completa del pacchetto comporterebbe la perdita di informazioni sul database?
Garrett,

Non dovrebbe, ma per sicurezza dovresti sempre fare il backup del tuo DBS.
johnshen64,

0

Ho ricevuto questo errore quando ho eliminato la posizione che uso per tmpdir. Se hai modificato di recente il tuo tmpdir, potresti voler verificare che sia un luogo valido e scrivibile.

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.