Alterações em uma tabela MySQL InnoDB - quais arquivos estão envolvidos e por quê?
-
05-07-2019 - |
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 ainnodb_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:
- Quando é o arquivo criado?
- Quando o arquivo de ser escrito para?
- Quando o arquivo ser lido a partir de?
- Qual seria a conseqüência se o arquivo está corrompido ou excluído?
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 deInnoDB
dados internos que o arquivo.frm
para a tabela existe. Talvez você tenha excluído e recriado arquivos de dadosInnoDB
mas ter esquecido de apagar os arquivos.frm
correspondentes das tabelasInnoDB
, ou você mudaram arquivos.frm
para outro banco de dados?