O que é o arquivo ibdata1 no meu diretório / var / lib / mysql?

29

Efetuando login no meu painel de controle do Webmin, notei que praticamente todo o meu espaço em disco está cheio. Eu procurei pelos dez maiores arquivos / diretórios do meu sistema e descobri que um arquivo chamado ibdata1 ocupa cerca de 94 GB de espaço. Ele reside no meu diretório / var / lib / mysql.

O que o ibdata1 faz? Estou seguro para removê-lo? Minha suposição é que é um despejo de algum tipo, mas isso é apenas um palpite.

    
por James 12.03.2013 / 21:26

3 respostas

34

O arquivo ibdata1 é o espaço de tabela do sistema para a infra-estrutura do InnoDB.

Ele contém várias classes de informações vitais para o InnoDB

  • Páginas de dados de tabela
  • Índice de páginas de tabela
  • Dicionário de dados
  • Dados de controle do MVCC
    • Desfazer espaço
    • Rollback Segments
  • Buffer de gravação dupla (páginas gravadas no plano de fundo para evitar o cache do sistema operacional)
  • Inserir buffer (alterações nos índices secundários)

Por favor, note o lugar de ibdata1 no Universo InnoDB (no lado direito)

Vocêpodeseparardadosepáginasdeíndicedeibdata1ativando innodb_file_per_table . Isso fará com que qualquer tabela InnoDB recém-criada armazene dados e páginas de índice em um arquivo .ibd externo.

Exemplo

  • datadir é / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB; , cria /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table ativado, páginas de dados / índice armazenadas em /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table desativado, Data / Index Pages armazenadas em ibdata1

Não importa onde a tabela InnoDB esteja armazenada, a funcionalidade do InnoDB requer a procura de metadados da tabela, o armazenamento e a recuperação MVCC informações para apoiar conformidade com o ACID e Transaction Isolation .

Aqui estão meus artigos anteriores sobre a separação de dados e índices de tabelas do ibdata1

O QUE FAZER EM SEGUIDA

Você pode continuar tendo ibdata1 armazenado tudo, mas isso faz com que o LVM faça instantâneos reais (minha opinião pessoal).

Você precisa usar a postagem do My StackOverflow e encolher esse arquivo permanentemente.

Por favor, execute esta consulta:

SELECT 
    ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;

Isso vai dizer quanto espaço desperdiçado pode ser recuperado após aplicar a limpeza do InnoDB.

    
por 13.03.2013 / 19:07
8

Esse arquivo é ibdata1 , não ibdatal e contém todos os seus bancos de dados InnoDB. Se você excluí-lo, perderá todos os seus dados.

Para algumas idéias sobre como lidar com isso, consulte Como reduzir / limpar o arquivo ibdata1 no MySQL .

    
por 12.03.2013 / 21:29
2

Se você usar innodb como mecanismo MySQL por padrão, armazenará todos seus bancos de dados em ibdata1. Além disso, há arquivos de log ib_logfile0 e ib_logfile1. Não exclua esses arquivos.

    
por 13.03.2013 / 01:05