Como soltar todas as tabelas em um banco de dados MySQL sem soltar o banco de dados?
12
Eu preciso soltar todas as tabelas em um banco de dados sem saber seus nomes antes. O procedimento típico é descartar e recriar o banco de dados, mas essa não é uma opção. Qual é a melhor maneira de fazer isso?
A propósito, por que você escreve '$' antes do valor do IFS? Por que não se parece com "IFS = '\ n'"?
Kolypto #
@o_OTync O uso $''faz com que o bash interprete sequências com barra invertida em vez de interpretá-las literalmente. '\n'conteria exatamente \ n, exatamente assim, que $IFSentenderia estar dividindo \ n caracteres. $'\n'conteria um caractere de nova linha, 0x0D. Dê uma olhada aqui para obter mais informações: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .
9139 Jeff Snider
Eu acho que isso é mais simples do que usar o INFORMATION_SCHEMA.
Se você tiver acesso ao sistema de arquivos, apenas rm -rf databasename/*:).
A instrução Drop database faz o mesmo ... Trecho do manual MySQL:
A instrução DROP DATABASE remove do diretório de banco de dados especificado os arquivos e diretórios que o próprio MySQL pode criar durante a operação normal:
Extremamente má idéia para qualquer configuração não-trivial como MySQL não está esperando esses arquivos para desaparecer de repente e poderia estar no meio de qualquer número de operações, transações, replicação, fechaduras ...
bot403
Você consideraria revisar sua resposta para incluir os comandos e procedimentos adequados?
Respostas:
Existe uma linha simples do bash usando mysqldump (do Thingy Ma Jig Blog ).
Se você está recebendo este erro:
Tente o seguinte:
Agora ele ignora as restrições.
fonte
Você deve usar as tabelas information_schema para buscar os metadados sobre o banco de dados e soltar as tabelas listadas lá.
fonte
Você também pode tentar um script rápido do shell:
Remova
echo
depois de verificar se ele fará o que você espera.fonte
$''
faz com que o bash interprete sequências com barra invertida em vez de interpretá-las literalmente.'\n'
conteria exatamente \ n, exatamente assim, que$IFS
entenderia estar dividindo \ n caracteres.$'\n'
conteria um caractere de nova linha, 0x0D. Dê uma olhada aqui para obter mais informações: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .Houve recentemente uma entrada no blog do Xaprb que aborda isso muito bem.
Inclui por que o uso
INFORMATION_SCHEMA
nem sempre é uma coisa boa e faz referência a uma ferramenta dessas pessoas adoráveis do Maatkit .Tente o seguinte com
mk-find
:Se você está satisfeito com os resultados, então:
fonte
Se você tiver acesso ao sistema de arquivos, apenas
rm -rf databasename/*
:).A instrução Drop database faz o mesmo ... Trecho do manual MySQL:
A instrução DROP DATABASE remove do diretório de banco de dados especificado os arquivos e diretórios que o próprio MySQL pode criar durante a operação normal:
fonte