Pergunta

Ao alterar o conteúdo de uma tabela InnoDB MySQL os seguintes arquivos no sistema de arquivos parece estar envolvido / alterados:

  • /path/to/mysql/data/[database]/[table].ibd (devido a innodb_file_per_table)
  • /path/to/mysql/data/data/ib_logfile0
  • /path/to/mysql/data/data/ib_logfile1
  • /path/to/mysql/data/data/ibdata1

Para cada um destes arquivos:

  1. Quando é o arquivo criado?
  2. Quando o arquivo de ser escrito para?
  3. Quando o arquivo ser lido a partir de?
  4. Qual seria a conseqüência se o arquivo está corrompido ou excluído?
Foi útil?

Solução

/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)

Este é onde os dados são armazenados. Elas são criadas quando você cria as tabelas.

/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1

Estes são logfiles.

Todas as alterações de dados são gravados no logfiles sequencialmente, que permite o registo write-ahead (crucial para transações)

/path/to/mysql/data/data/ibdata1

Este é onde os dados de dados do sistema e UNDO são armazenados.

Se ibdata não for encontrado, MySQL vai pensar que o motor InnoDB não é inicializado e apenas criar o novo ibdata. Mesmo com logfiles.

Se uma consulta é emitida contra uma mesa, e arquivo .ibd não for encontrado, MySQL irá falhar com esta mensagem:

Não é possível encontrar database/table tabela do dicionário de InnoDB dados internos que o arquivo .frm para a tabela existe. Talvez você tenha excluído e recriado arquivos de dados InnoDB mas ter esquecido de apagar os arquivos .frm correspondentes das tabelas InnoDB, ou você mudaram arquivos .frm para outro banco de dados?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top