Mecanismo de armazenamento desconhecido / não suportado: InnoDB | MySQL Ubuntu

45

Recentemente, atualizei do LTS Ubuntu anterior para o Precise e agora o mysql se recusa a iniciar. Ele reclama do seguinte quando tento iniciá-lo:

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

E isso mostra em "/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

Eu verifiquei as permissões em todos os diretórios mysql para garantir que ele possuísse propriedade e também renomeei os ib_logs anteriores para que eles pudessem ser reformulados. No momento, não estou conseguindo entender onde está esse problema, depois de analisar os resultados do Google por 2 horas.

Garrett
fonte
Aliás, consegui executar o mysql comentando a entrada "skip_innodb" no my.cnf. Mas tenho quase certeza de que não deveria resolver isso dessa maneira.
amigos estão
Por favor, mostre todas as variáveis de my.cnf que são configurações InnoDB
RolandoMySQLDBA

Respostas:

34

Depois de verificar os logs, encontrei o seguinte erro:

[ERROR] Unknown/unsupported storage engine: InnoDB

Eu removi esses arquivos:

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

às /var/lib/mysql

Isso resolveu meu problema após a reinicialização.

Vinay
fonte
7
o rmcomando é usado para remover os arquivos em vez de renomeá-los, tanto quanto eu sei ...
Itai Ganot
2
Esses arquivos contêm os dados reais do seu banco de dados. Você não deseja excluí-los.
Stefan Lasiewski
Não, o ibdataarquivo contém os dados (a menos que você tenha arquivo por tabela). Os arquivos ib_logfile são os logs de reprodução que contêm os dados para transações que alteram o banco de dados que podem estar em processo quando / se o banco de dados travou. Se você conseguiu desligar o servidor com êxito, excluir esses arquivos de log não fará mal a você. Se falhar, você precisará deles. Mas esta é uma resposta válida. Se o seu arquivo my.cnf alterar a opção innodb_log_file_size e não corresponder mais a esses dois arquivos, você receberá a mensagem de erro informada pelo OP. Excluir / mover para que novos sejam corrigidos.
Safado
2
Por que as edições só podem ser feitas por 5 minutos está além de mim ... Eu deveria ter afirmado que é uma correção potencial para o erro mencionado acima. Conforme declarado pelo OP, não era a solução que ele precisava.
Safado 30/06
1
Você sempre pode renomeá-los, por exemplo mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
kenorb
23

Se você realmente precisa skip-innodb(caso de uso: pouco espaço na memória), é claro que não precisa comentar. No entanto, se o InnoDB for o mecanismo de armazenamento padrão, o servidor falhará ao iniciar até você informar qual mecanismo de armazenamento usar, por exemplo, default-storage-engine=myisampara MyISAM.

Então, tente o seguinte:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
Andy Mikhaylenko
fonte
6
Tente adicionar "default-storage-engine = myisam" ao /etc/mysql/my.cnf na seção [mysqld] se você quiser "skip_innodb".
pincoded 30/07/2012
Funciona lindamente. Felicidades!
Boann
4
E se você quiser suporte ao innodb?
Nilzor #
1
Mariadb no Centos 7 foi adicionado default-storage-engine=myisamno arquivo /etc/my.cnf em [mysqld]. Isso fez o truque. Thx
Damodar Bashyal
12

Se você estiver usando o MySQL 5.6+ e quiser desativar o InnoDB, não se esqueça de " --default-tmp-storage " ou ele não funcionará:

Para desativar o InnoDB, use --innodb = OFF ou --skip-innodb. Nesse caso, como o mecanismo de armazenamento padrão é o InnoDB, o servidor não será iniciado, a menos que você use também --default-storage-engine e --default-storage-engine e --default-tmp-storage-engine para definir o padrão para algum outro mecanismo permanente e Tabelas TEMPORÁRIAS.

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

Você pode adicionar isso ao seu my.cnf:

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

apenas para garantir que funcione.

Juan
fonte
+1, nunca observe o documento oficial. deve definir default-storage-enginee default-tmp-storage-engine, obrigado.
Giberno
7

Verifique seu log de erros do mysql.

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

Se o seu registro diz (como o meu):

InnoDB: Inicializando buffer pool, tamanho = 128.0M
InnoDB: mmap (137363456 bytes) falhou; errno 12
[ERRO] InnoDB: Não é possível alocar memória para o buffer pool

Você não tem memória suficiente para usar o tamanho padrão do buffer de 128M

Edite o arquivo de configuração /etc/mysql/my.cnf adicionando uma linha para especificar um tamanho innodb_buffer_pool_size menor.

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

Salve o arquivo de configuração e inicie o mysql

sudo service mysql start
user2219975
fonte
Está no local aqui. Mas também pode haver processos pendentes do servidor da Web ou algo que consome a RAM, verifique isso também.
S28
0

Tente mais 2 coisas. 1. Diminua o tamanho do buffer pool do innodb. 2. Edite o script inicial do mysql e adicione a opção --innodb.

Gostaria de saber também se o seu pacote é de buggy. Você poderia tentar uma versão menor diferente?

Além disso, suponho que seu servidor mysql também tenha sido atualizado? Talvez essa versão esteja quebrada? Preciso ainda não é final.

johnshen64
fonte
Já fiz isso, sem efeito.
Garrett
Desculpe, editei com algumas coisas para tentar, mais como um pacote ruim. Tente usar a versão mysql.com ou o percona, que geralmente são mais estáveis.
precisa saber é o seguinte
Verifique também se o pacote antigo foi completamente eliminado quando o novo estiver instalado.
precisa saber é o seguinte
Limpar o pacote resultaria completamente em informações perdidas do banco de dados?
Garrett
Não deveria, mas para estar seguro, você deve sempre fazer backup do seu DBS.
johnshen64
0

Eu recebi esse erro quando excluí o local para o qual uso tmpdir. Se você alterou recentemente o seu tmpdir, convém verificar se é um local gravável e válido.

Jeff
fonte