Remova o MySQL ibdata1 sem descarregar e restaurar os bancos de dados apropriados existentes

6

Meu servidor MySQL contém dois bancos de dados grandes com mais de 100 GB. Um foi criado com innodb_file_per_table e um não foi. O que não foi, foi descartado, pronto para ser recarregado. No entanto, o arquivo ibdata1 ainda é enorme e não tenho espaço livre suficiente. O conselho normal nessa situação é despejar e remover cada banco de dados, parar o MySQL, remover ibdata1 e os logs de transação e, em seguida, recarregar os bancos de dados.

Minha pergunta específica é: posso deixar os bancos de dados criados com innodb_file_per_table sozinhos? Ou eles serão destruídos quando eu remover o ibdata1, mesmo que todos os seus arquivos estejam separados?

Eu não posso bancar esse banco de dados off-line para fazer o despejo e recarregá-lo. E como já é feito corretamente com arquivos separados por tabela, seria muito inútil.

    
por Halfgaar 11.11.2013 / 21:10

3 respostas

3

My specific question is: can I leave databases that were created with innodb_file_per_table alone? Or will they be destroyed when I remove ibdata1, even though all their files are separate?

O% monolíticoibdata1 contém alguns dados do sistema. É possível que você sofra perda de dados tentando excluí-la manualmente sem se livrar de todos os seus bancos de dados existentes primeiro.
(Existem maneiras de se recuperar de tal situação, mas por que se colocar nessa posição? Siga as instruções que você recebeu e despeje TODOS seus bancos de dados, reconstrua seu MySQL instalação, e recarregue-os, é a opção segura .

I can't afford to take this database off-line to dump and reload it.

Você terá que pagar por isso. É apenas uma interrupção - agende e faça acontecer.
ibdata1 e eu adiro a sua experiência nesses assuntos.

(Eu também sugiro ler seus outros posts, ligados a partir dessa resposta, antes de agendar a janela de interrupção. Você também pode limpar tantos problemas potenciais quanto puder, já que terá que fazer uma janela de interrupção ...)

    
por 11.11.2013 / 22:04
0

Se você estiver executando o MySQL 5.6, você pode tirar proveito de um novo recurso chamado espaços de tabela transportáveis .

Se você não está rodando o 5.6, você pode usar a ferramenta innobackupex do Percona Xtrabackup . usando o XtraDB (mecanismo InnoDB modificado do Percona, parte do Percona Server). Importar e exportar tabelas individuais

Se você não estiver executando o 5.6 e não puder executar o Percona Server

    
por 11.11.2013 / 23:31
0

se um banco de dados precisa estar ativo, devido a seleções serem cruciais e você tem armazenamento rápido (como o volume iops no ec2), uma forma de minimizar o tempo de inatividade é parar o mysql, rsync sobre dados dir para volume rápido e em seguida, retorne o mestre em somente leitura.

então você tem tempo para descarregar / importar e assim por diante, enquanto o seu servidor master antigo seleciona qrys. depois que o dump / import for concluído e a segunda caixa estiver pronta para receber as gravações, basta recortar no código da camada do aplicativo.

se o seu mestre precisa escrever o tempo todo, você não pode usar isso. se você tem escravos dedicados, você pode bloquear o escravo master, fixup e promover para dominar.

    
por 12.11.2013 / 03:04

Tags