Qual é o arquivo ibdata1 no meu diretório / var / lib / mysql?
32
Ao fazer login no painel de controle do Webmin, notei que praticamente todo o espaço em disco está cheio. Procurei nos 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 ibdata1 faz? Estou seguro para removê-lo? Minha suposição é que é algum tipo de despejo, mas isso é apenas um palpite.
O arquivo ibdata1 é o espaço de tabela do sistema para a infraestrutura do InnoDB.
Ele contém várias classes de informações vitais para o InnoDB
Páginas de dados da tabela
Páginas de índice da tabela
Dicionário de dados
Dados de controle do MVCC
Desfazer espaço
Segmentos de reversão
Buffer de gravação dupla (páginas gravadas em segundo plano para evitar o cache do SO)
Inserir buffer (alterações nos índices secundários)
Observe o lugar de ibdata1 no universo InnoDB (no lado direito)
Você pode separar as páginas de dados e de índice ibdata1ativando innodb_file_per_table . Isso fará com que qualquer tabela InnoDB recém-criada armazene dados e páginas de índice em um .ibdarquivo externo .
innodb_file_per_table ativado, páginas de dados / índice armazenadas em /var/lib/mysql/mydb/mytable.ibd
innodb_file_per_table desativado, páginas de dados / índice armazenadas no ibdata1
Não importa onde a tabela do InnoDB esteja armazenada, a funcionalidade do InnoDB exige a procura de metadados da tabela e o armazenamento e recuperação de informações do MVCC para dar suporte à conformidade com ACID e ao isolamento da transação .
Aqui estão meus artigos anteriores sobre a separação de dados e índices de tabela do ibdata1
Você pode continuar tendo o ibdata1 armazenado tudo, mas isso faz com que os instantâneos do LVM sejam uma verdadeira chatice (minha opinião pessoal).
Você precisa usar a postagem My StackOverflow e reduzir 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 informará quanto espaço desperdiçado pode ser recuperado após a aplicação da Limpeza do InnoDB.
Obrigado pela sua contribuição. Desde então, minha cota de disco foi totalmente preenchida - antes de agir de acordo com algum conselho de suas postagens, precisarei de espaço livre? Observo que sua postagem original no SO menciona fazer um despejo de SQL, mas isso provavelmente criaria um arquivo de ~ 90 GB sem ter para onde ir.
James
O mysqldump exibirá apenas a representação lógica das páginas de dados, não os índices. Você precisará de outra montagem em disco, talvez um servidor remoto, para despejar os dados.
RolandoMySQLDBA 14/03
9
Ele retorna 91.25350952148438 para mim como SpaceToReclaim. Isso está em megabytes? por cento? bytes?
Isaac
Eu sei que isso é muito antigo. Mas para quem vem aqui com o problema, é necessário substituir o número 94pelo tamanho do seu ibdata1arquivo em GB e SpaceToReclaimele fornecerá o tamanho em GB.
anupsabraham
8
Esse arquivo é ibdata1, nãoibdatal e contém todos os seus bancos de dados do InnoDB. Se você excluí-lo, você perde todos os seus dados.
Se você usar o innodb como mecanismo MySQL por padrão, armazenará todos os seus bancos de dados no ibdata1. Também existem arquivos de log ib_logfile0 e ib_logfile1. Não exclua esses arquivos.
SpaceToReclaim
. Isso está em megabytes? por cento? bytes?94
pelo tamanho do seuibdata1
arquivo em GB eSpaceToReclaim
ele fornecerá o tamanho em GB.Esse arquivo é
ibdata1
, nãoibdatal
e contém todos os seus bancos de dados do InnoDB. Se você excluí-lo, você perde todos os seus dados.Para algumas idéias sobre como lidar com isso, consulte Como reduzir / limpar o arquivo ibdata1 no MySQL .
fonte
Se você usar o innodb como mecanismo MySQL por padrão, armazenará todos os seus bancos de dados no ibdata1. Também existem arquivos de log ib_logfile0 e ib_logfile1. Não exclua esses arquivos.
fonte