Eu sou bastante novo no MySQL e estou recebendo um erro bastante interessante, no qual não consigo encontrar nenhuma ajuda pelo google e pela pesquisa de stackoverflow.
Estou executando um servidor local do MySQL 5.6.10 no MacOS 10.8.3 e gerencio meu banco de dados via Navicat essentials for MySQL.
O erro que recebo é que, depois de executar e gerenciar meu banco de dados, por alguns dias / semanas, algo dispara (parece incompleto) para excluir algumas das tabelas que criei usando consultas do Navicat.
Quando tento executar consultas usando essas tabelas, o Navicat me avisa que a tabela específica não existe. Até aí tudo bem - aqui vem a parte boa:
Quando tento criar a tabela, por exemplo, chamada "temp", que estava anteriormente lá, recebo a seguinte mensagem de erro:
Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.
No entanto, se eu tentar soltar a tabela ou tentar descartar o espaço de tabela para esta tabela, use
DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;
Eu recebo as seguintes mensagens de erro:
Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist
Isso significa que sou aconselhado a descartar o espaço de tabela, mas quando tento fazê-lo, a tabela não existe. É possível que exista algum tipo de restante dessa tabela em um local diferente onde a consulta DISCARD não está verificando? E alguém tem uma idéia do que poderia desencadear tudo isso - completamente aleatoriamente, ao que parece?
Como eu disse, sou novo no assunto e praticamente sem noção. Eu suspeito que reiniciar meu laptop, ou seja, redefinir meu servidor MySQL local ou talvez direitos de permissão de usuário possam ter a ver com isso, mas estou apenas fazendo uma hipótese aqui.
fonte
Respostas:
Um pouco tarde aqui, mas geralmente vi esse problema ocorrer quando você recebe um erro 'tablespace full' ao executar no modo 'innodb_file_per_table'. Sem entrar em muitos detalhes (mais aqui ), o espaço de tabela do servidor de banco de dados é definido pela configuração innodb_data_file_path e, por padrão, é bastante pequeno. Mesmo maior, o 'espaço de tabela cheio' ainda pode ocorrer com consultas maiores e isso (muitas coisas que não são da tabela são armazenadas lá, desfaz logs, caches, etc ...).
De qualquer forma, descobri que, se você procurar no diretório do SO em que os arquivos por tabela estão armazenados, / var / lib / mysql por padrão no OSX, / usr / local / var / mysql com o homebrew iirc, você encontrará um arquivo tablename.ibd órfão sem o arquivo tablename.frm complementar. Se você mover esse arquivo .ibd para um local temporário seguro (apenas por segurança), isso deve corrigir o problema.
Uma ressalva, no entanto, verifique se o que está causando o problema originalmente, por exemplo, consultas de longa duração, tabela bloqueada, etc ... foi apagado. Caso contrário, você acaba com outro arquivo .ibd órfão ao tentar uma segunda vez.
fonte
/usr/local/mysql/data
lugar de/var/lib/mysql/
. Caso contrário, perfeitamente resolvido o problema.Usuários Xampp e Mamp
Teve o mesmo erro ao importar um banco de dados (após esvaziá-lo) através do MySQL. Descobri que havia um
tablename.ibd
arquivo enquanto todos os outros foram excluídos. Excluí-o manualmentemysql/data/database_name
e o erro desapareceu.fonte
Para usuários WAMP [Windows 7 Ultimate x64 bits]:
Concordo com o que o DangerDave disse e, portanto, estou disponibilizando uma resposta para os usuários do WAMP .
Agora, você verá pastas de todos os seus bancos de dados
[Your offending MySQL table name].frm
, deve haver um arquivo[Your offending MySQL table name].ibd
[Your offending MySQL table name].ibd
fonte
Se você receber o
.idb
recriado novamente após excluí-lo, leia esta resposta.Foi assim que funcionou comigo. Eu tinha o
.idb
arquivo sem ele correspondente.frm
e sempre que eu excluí-lo.idb
, o banco de dados o recria. e encontrei a solução em uma linha na documentação do MySQL (parte Tablespace Não Existe )Copiei outro
.frm
arquivo de tabela e nomeie-o como minha tabela ausente, depois faça uma consulta normal da tabela suspensa e pronto, funcionou e a tabela é descartada normalmente!meu sistema é XAMPP no Windows MariaDB v 10.1.8
fonte
No meu caso, a única solução de trabalho foi:
bad_table
MOTOR DE TABELA = MyISAM ...bad_table
fonte
Isto é exatamente o que eu fiz no mariadb 10.2.16 no fedora quando eu tinha uma tabela que mostrava exatamente os mesmos erros no arquivo de log ...
sua milhagem e erros podem variar, mas o principal que eu assumo é
com a tabela suspensa não está funcionando, bem como alterar a tabela ...
create table também falha assim:
para consertar isso, o que eu fiz foi primeiro
no diretório / var / lib / mysql / database_name, fiz o seguinte como root, reconhecendo a substituição de innodb_table.ibd, causando problemas
então de volta ao console do mysql, emiti um comando drop bem-sucedido nas duas tabelas
e agora tudo está quadrado e posso recriar uma única mesa ...
fonte
No meu caso:
Primeiro remova
tableName.ibd
no diretório do banco de dados do Mysql e execute novamente:fonte
Eu recebi o mesmo erro ao executá-lo no wampserver ao tentar criar uma tabela de usuários. Encontrei um arquivo users.ibd e, após excluir esse arquivo, executei o comando migrate novamente e ele funcionou. O arquivo na minha máquina Windows estava localizado em wamp / bin / mysql / mysql5.6.12 / data / myproject.
fonte
Solução
No entanto, a opção mais fácil é a seguinte: reinicie o MySQL e execute as mesmas quatro etapas da seguinte maneira:
Dessa forma, a identificação do espaço de tabela no dicionário de dados e o arquivo corresponderam; assim, a importação do espaço de tabela foi bem-sucedida.
Isso pode dar a você maior confiança ao lidar com algumas das "pegadinhas" do InnoDB durante o processo de recuperação ou mesmo transferências de arquivos.
ref
fonte
Aqui estão as etapas da solução:
fonte
Teve esse problema várias vezes. Se você possui um banco de dados grande e deseja evitar o backup / restauração (com a tabela ausente adicionada), tente algumas vezes:
DROP TABLE minha_tabela;
ALTER TABLE my_table DISCARD TABLESPACE;
-e-
rm minha_tabela.ibd (órfã sem minha_tabela.frm correspondente) localizada no diretório / var / lib / mysql / my_db /
-e depois-
CRIAR TABELA SE NÃO EXISTE
my_table
(...)fonte
Excluir / mover tablename.ibd com certeza não funcionou para mim.
Como eu resolvi isso
Como eu ia excluir a tabela corrompida e inexistente, fiz um backup das outras tabelas indo para phpmyadmin-> database-> export-> tabelas selecionadas para backup-> export (como .sql).
Depois disso, selecionei o ícone do banco de dados ao lado do nome do banco de dados e o soltei. Criou um novo banco de dados. Selecione seu novo banco de dados-> importação-> selecione o arquivo que você baixou anteriormente-> clique em importar. Agora eu tenho minhas tabelas de trabalho antigas e a tabela corrompida foi excluída. Agora eu apenas criei a tabela que estava lançando o erro.
Provavelmente eu tive um backup anterior da tabela corrompida.
fonte
Este erro ocorre quando você suspende algumas funções. Como executar a consulta abaixo com chave estrangeira incorreta.
fonte
Teve exatamente o mesmo problema; Eu fabricaria adicionado
[email protected]
(depois de ter anteriormente 5.5).Os padrões de fermentação para 5.6 são,
innodb_file_per_table=1
enquanto em 5.5 sãoinnodb_file_per_table=0
.Seu
ibdata1
arquivo existente (os dados combinados do innodb) ainda terá referências às tabelas que você está tentando criar / soltar. Altere deinnodb_file_per_table
volta para 0 ou exclua o arquivo de dados ibdata1 ( isso perderá todos os seus dados, portanto, certifique-se de que o mysqldump primeiro ele ou que já tenha um dump .sql ).O outro
[email protected]
padrão de fermentação que me mordeu foi a falta de uma porta; portanto, a rede estava padronizada para soquetes unix, e o cliente mysql continuava relatando:Eu adicionei
<string>--port=3306</string>
à.plist
matriz, mas você também pode especificarport=3306
no seumy.cnf
Corre
brew services stop [email protected]
faça as alteraçõesbrew services start [email protected]
fonte
Tentar eliminar o espaço de tabela pode causar outros erros. Para mim, recebi o seguinte erro:
Minha solução foi soltar o banco de dados. Isso removerá todos os espaços de tabela relacionados a ele e permitirá que você crie as tabelas novamente.
fonte
rm -r
. É irritante, mas nem espetacular.Se você tiver outro servidor com uma boa versão da mesma tabela, poderá fazer uma cópia (table_copy), transfira o table_copy para o servidor com problema. Em seguida, exclua a tabela de problemas e renomeie table_copy para table.
fonte
Para mim, ajudou apenas a ir para o diretório MYSQL DATA em / var / lib / mysql / {db_name} (linux) e soltar o arquivo {table_name} .ibd que era o mesmo que o nome da pasta.
fonte
Excluo apenas meu banco de dados antigo localizado no meu host local diretamente do wamp, Interrompa todos os serviços, acesse wamp / bin / mysql / mysql [versão] / data e encontrei o banco de dados com problemas, excluo-o e inicio novamente wamp todos os serviços, crie novamente seu banco de dados e pronto, agora você pode importar suas tabelas,
fonte
A maneira que eu encontrei para "resolver" esse problema é bastante irritante, mas existe um script que lida com isso.
Essencialmente, você precisa do
ibdata1
eib_logfile*
arquivos para ir embora (eles contêm os mapeamentos de chaves estrangeiras, entre outras coisas). A única maneira segura de fazer isso é exportar todos os seus bancos de dados, parar o mysql, remover os arquivos, iniciar o mysql e importar os arquivos.O roteiro que ajuda a resolver este problema é https://github.com/uberhacker/shrink-ibdata1 , embora o propósito declarado desse script é diferente, ele faz resolver o problema.
fonte
A única maneira que funcionou para mim foi:
fonte
se você tiver esse problema e não tiver outra opção, altere o mecanismo para outro mecanismo como 'myisam' e tente criar a tabela.
isenção de responsabilidade: não é a resposta válida, pois você pode ter restrições de chave estrangeira que não serão suportadas por outro mecanismo de armazenamento. Todo mecanismo de armazenamento tem sua própria especialidade para armazenar e acessar dados, e esses pontos também devem ser levados em consideração.
fonte
DESCARTE o espaço de tabela antes de IMPORTAR
Eu tenho a mesma solução de problema está abaixo
Primeiro você deve soltar o nome do seu banco de dados. se seu banco de dados não estiver excluindo, você me enviará um email Para o sistema Windows, seu diretório será C: / xampp / mysql / data / yourdabasefolder remove "yourdabasefolder"
Novamente, você deve criar um novo banco de dados e importar seu arquivo sql antigo. Será trabalho
obrigado
fonte
Eu tive que localizar meu diretório de dados MySQL:
MOSTRAR VARIÁVEIS ONDE Nome_da_ Variável COMO "% dir"
Em seguida, force a remoção desse banco de dados:
sudo rm -rf
fonte
Você pode executar a seguinte consulta como um usuário root mysql
fonte
Ei, desenvolvedores não perca seu tempo. Simplesmente exclua o banco de dados que contém tabelas e importe tabelas inteiras novamente. Economize tempo = tempo é dinheiro. Felicidades.
fonte