Então, eu tenho um servidor de banco de dados de teste que foi configurado em um fluxo de replicação. Por cima do nome, veio uma otimização que rapidamente preencheu o espaço no datadir dos escravos. O Mysql obedientemente estava apenas esperando por mais espaço.
Este datadir é um sistema de arquivos usado SOMENTE como o datadir do mysql, portanto não havia mais nada para liberar.
Eu tinha uma tabela de teste de innodb de 4 GB que não fazia parte do fluxo de replicação, então imaginei que tentaria algo para ver se funcionaria e, sendo um ambiente de teste, não estava muito preocupado se as coisas saíssem horrivelmente erradas.
Aqui estão os passos que tomei
- Lavou a mesa que eu estava prestes a me mudar
- Colocou um bloqueio de leitura nele (mesmo que nada estivesse gravando nele e não estivesse no fluxo de replicação)
- Copiou o .frm e o .ibd para um sistema de arquivos com algum espaço livre
- Destrancou a mesa
- Truncou a tabela - isso liberou espaço suficiente para a otimização terminar, e a replicação começou a funcionar novamente.
- Parar slaving / shutdown mysql
- Copie o arquivo de tmp de volta para o diretório de dados
- Reinicie o mysql
Nada aparece no log .err, as coisas parecem boas. Eu conecto e uso mydb; e veja a tabela com a qual eu estava mexendo nas tabelas do show. Mas se eu tentar
select * from testtable limit 10;
Eu recebo o erro
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Pelo que sei até agora, posso ler todas as outras tabelas e a replicação foi iniciada sem queixas.
Existe algo que eu possa fazer para me recuperar desse ponto? Posso reconstruí-lo do zero, se necessário, mas fiquei curioso com o que os outros pensavam sobre esse empreendimento em geral. Houve algo sobre a série de etapas que eu tomei que acabaria com mais resultados impecáveis?
E se este não fosse um servidor de teste, eu não poderia simplesmente 'fazer isso ao vivo' e ver o que acontece? Qual seria a melhor maneira de liberar espaço temporariamente em um escravo de produção se eu tivesse que gostar disso?
fonte
Table 'X' doesn't exist in engine
. Preciso fazer o método acima para todas as tabelas ou existem maneiras melhores de corrigir isso?Eu experimentei com o meu Mac, antes de vender para um amigo, basta copiar a pasta XAMPP apenas para o meu disco rígido. (NÃO É SUCESSO) Infelizmente, isso estava causando problemas para mim, porque tentei as seguintes etapas: - Instalei o XAMPP novo e copio todo o \{docs e var \ mysql no meu novo Mac, aqueles db apenas com .frm e .ibd, NÃO FUNCIONA, ainda não consigo acessar as tabelas dentro do PHPMyAdmin ... - Tentei instalar a mesma versão do xampp e repita as etapas acima, ainda NÃO FUNCIONANDO. - Decidiu ir para a cama.
(SUCESSO) - Hoje de manhã, trouxe meu disco de backup e tente com o Windows 7. - Instale o XAMPP para Windows mais recente, c: \ xampp - Eu tenho um site (pasta) do meu backup \{docs e a pasta do banco de dados correspondente dentro \ var \ mysql está PRONTO no windows 7, eu só quero tentar com um site e depois tentar o resto, porque tenho muitos projetos dentro de activationdocs \ e \ var \ mysql - copio a menção activationdocs \ para o Windows c: \ xampp \ httdocs e copie o \ var \ mysql para c: \ xampp \ mysql \ data
Ainda não copiei o ib_logfile0, ib_logfile1, ibdata1 do meu arquivo de backup para o Windows xampp c: \ xampp \ mysql \ data
Eu atualizo o http: // localhost / mywebsite
WOW WOW FEITO ... está funcionando ...
fonte