O MySQL falhou ao iniciar devido a muitas tabelas InnoDB?

2

Eu tenho cerca de 6000 tabelas InnoDB em 15 bancos de dados, e usando o innodb_file_per_table , descobri quando toda vez que eu reinicio o servidor Ubuntu, o MySQL falha ao iniciar, com erro ...

Version: '5.1.56-rel12.7-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Percona Server (GPL), 12.7, Revision 224)
111106  5:09:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./db1/tbl182.ibd
InnoDB: File operation call: 'open'.

Como o nome do arquivo da tabela problemática (ou seja, tbl182.ibd) não é o mesmo toda vez, então suspeito que o MySQL esteja fazendo algo com todas as tabelas?

No entanto, quando eu reiniciar usando o comando (sudo /etc/init.d/mysql restart), o MySQL pode ser iniciado com sucesso . Isso é muito estranho!

Meu Env: Versão do MySQL: 5.1.56-rel12.7-log (Ubuntu 10.04 LTS + Percona)

Atualizar :

Problema resolvido pela remoção de um grande número de tabelas, portanto, deve ser algo relacionado ao limite do arquivo, não à permissão.

Eu já mudei o /etc/init.d/mysql para o valor hard-coded ulimit -n 50000 , mas ainda não ajudei quando criei tabelas massivas.

    
por Howard 06.11.2011 / 06:25

3 respostas

6

O problema não é o limite de identificadores de arquivo. Isso seria erro 24, não 13. O problema é o que diz: permissões. Eu já vi isso dezenas de vezes, e mesmo quando as pessoas pensam que tudo está configurado corretamente e tem as permissões certas, ele é permissões, toda vez, e alguém sempre descobre que eles perderam alguma coisa :) Você tem permissões definidas errado ou você tem algo parecido com o seguinte:

  • Há um conjunto de permissões estranho em um diretório de nível superior, como / sendo restrito. (Isso às vezes é importante).
  • Você tem outro processo, como duas instâncias do mysqld, em execução e interferindo nos privilégios.
  • O SELinux ou o AppArmor está interferindo.

Você "resolveu" o problema removendo um grande número de tabelas - não acho que isso seja realmente uma solução. Você provavelmente acabou de remover algumas tabelas que tinham permissões erradas definidas nelas:)

    
por 11.11.2011 / 20:00
1

Eu recomendo que você verifique a permissão de gravação para o usuário do banco de dados no diretório onde os arquivos do banco de dados estão localizados.

    
por 06.11.2011 / 12:44
1

Este é um problema do AppArmor? Pode ser algo como o AppArmor sendo iniciado ou interrompido quando você reinicia e quando você está tentando iniciá-lo manualmente.

Verifique seu syslog mais ou menos na mesma hora.

    
por 09.11.2011 / 18:01