Mudei o datadir de uma instalação do MySQL e todas as bases foram movidas corretamente, exceto uma. Eu posso conectar e USE
o banco de dados. SHOW TABLES
também me devolve todas as tabelas corretamente e os arquivos de cada tabela existem no diretório de dados do MySQL.
No entanto, quando tento SELECT
algo da tabela, recebo uma mensagem de erro informando que a tabela não existe. No entanto, isso não faz sentido, pois pude mostrar a mesma tabela por meio de uma SHOW TABLES
declaração.
Meu palpite é que SHOW TABLES
lista a existência do arquivo, mas não verifica se um arquivo está corrompido ou não. Conseqüentemente, posso listar esses arquivos, mas não acessá-los.
No entanto, é apenas um palpite. Eu nunca vi isso antes. Agora, não consigo reiniciar o banco de dados para teste, mas todos os outros aplicativos que o utilizam estão funcionando bem. Mas isso é apenas um palpite, nunca vi isso antes.
Alguém sabe por que isso está acontecendo?
Exemplo:
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database |
+-----------------------+
| TABLE_ONE |
| TABLE_TWO |
| TABLE_THREE |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist
fonte
Respostas:
Apenas no caso de alguém ainda se importar:
Eu tive o mesmo problema depois de copiar um diretório de banco de dados diretamente usando o comando
Se você fizer isso com um banco de dados que usa
InnoDB
tabelas, receberá esse erro louco 'tabela não existe' mencionado acima.O problema é que você precisa dos
ib*
arquivos na raiz do datadir do MySQL (por exemploibdata1
,ib_logfile0
eib_logfile1
).Quando copiei aqueles, funcionou para mim.
fonte
chown _mysql:wheel
o nome do banco de dados dir, ibdata e todos os arquivos no diretório (usechown -R ...
). Da mesma forma, as permissões estavam incorretas dentro do diretório, entãochmod -R 660 databasename
era necessário fazer com que as tabelas aparecessem na base de dados.chown
!!! Então, tudo depois decp
usar este comando ->chown mysql:mysql /var/lib/mysql/ -R
sudo chmod -R 600 /var/lib/mysql
Para mim, no Mac OS (Instalação do MySQL DMG), uma simples reinicialização do servidor MySQL resolveu o problema. Eu estou supondo que a hibernação causou isso.
fonte
sudo /usr/local/mysql/support-files/mysql.server restart
check table TABLE_ONE;
alguns erros "partição p2 retornou erro", "idx_blah_1 está marcado como corrompido" e "idx_blah_2 está marcado como corrompido". Agora estou de volta à execuçãooptimize table TABLE_ONE;
e obtendo o erro "Tabela 'database.TABLE_ONE' não existe".Recebo esse problema quando o caso do nome da tabela que estou usando está desativado. Então, a tabela é chamada 'db', mas eu usei 'DB' na instrução select. Verifique se o caso é o mesmo.
fonte
Este erro também pode ocorrer quando a configuração
lower_case_table_names
para1
, em seguida, tentando tabelas de acesso que foram criados com o valor padrão para essa variável. Nesse caso, você pode revertê-lo para o valor anterior e poderá ler a tabela.fonte
cp -a /var/lib/mysql /var/lib/mysql-backup
/var/lib/mysql
mysqldump >dbase.mysql
/var/lib/mysql
/var/lib/mysql-backup
para/var/lib/mysql
mysqldump < dbase.mysql
fonte
Por favor, execute a consulta:
Infelizmente, o MySQL permite que caracteres unicode e não imprimíveis sejam usados no nome da tabela. Se você criou suas tabelas copiando o código de criação de algum documento / site, é possível que ele tenha espaço de largura zero em algum lugar.
fonte
Acabei de passar três dias nesse pesadelo. Idealmente, você deve ter um backup que possa restaurar e simplesmente soltar a tabela danificada. Esses tipos de erros podem fazer com que o ibdata1 cresça imenso (100 GB ou mais em tabelas modestas)
Se você não possui um backup recente, como se dependesse do mySqlDump, provavelmente os backups foram interrompidos silenciosamente em algum momento do passado. Você precisará exportar os bancos de dados, o que obviamente não poderá, porque você receberá erros de bloqueio ao executar o mySqlDump.
Portanto, como solução alternativa, vá para
/var/log/mysql/database_name/
e remova o table_name. *Em seguida, tente imediatamente despejar a mesa; fazer isso agora deve funcionar. Agora restaure o banco de dados em um novo banco de dados e reconstrua as tabelas ausentes. Em seguida, despeje o banco de dados quebrado.
No nosso caso, também recebíamos
mysql has gone away
mensagens constantemente em intervalos aleatórios em todos os bancos de dados; Depois que o banco de dados danificado foi removido, tudo voltou ao normal.fonte
Não sei o motivo, mas no meu caso resolvi apenas desabilitar e habilitar a verificação de chaves estrangeiras
fonte
Eu tive o mesmo problema e procurei por 2-3 dias, mas a solução para mim foi realmente estúpida.
$ sudo service mysql restart
Agora as tabelas se tornam acessíveis.
fonte
Ok, isso vai parecer um absurdo, mas me humor.
Para mim, o problema foi resolvido quando mudei minha declaração para isso:
Fiz duas alterações
1.) Fiz o nome da tabela em letras minúsculas - eu sei !!
2.) Utilizou o símbolo de cotação específico = ` : É a chave acima do seu TAB
A solução parece absurda, mas funcionou e é sábado à noite e eu trabalho desde as 9 da manhã - então eu aceito :)
Boa sorte.
fonte
Eu tive esse problema depois de atualizar o WAMP, mas sem backup do banco de dados.
Isso funcionou para mim:
Pare o novo WAMP
Copie os diretórios do banco de dados necessários e o arquivo ibdata1 da instalação antiga do WAMP
Excluir
ib_logfile0
eib_logfile1
Iniciar o WAMP
Agora você deve conseguir fazer backup dos seus bancos de dados. No entanto, depois que o servidor reiniciar novamente, você ainda terá problemas. Então agora reinstale o WAMP e importe seus bancos de dados.
fonte
Tente executar a consulta sql para descartar o espaço de tabela antes de copiar o arquivo idb:
Copiar arquivo idb
Reinicie o MySql
fonte
Depois de ter que reinstalar o MySQL, tive o mesmo problema, parece que durante a instalação, alguns arquivos de configuração que armazenam dados sobre os arquivos de log do InnoDB, esses arquivos ib_logfile * (são arquivos de log, certo?), São substituídos. Para resolver esse problema, acabei de excluir os arquivos ib_logfile *.
fonte
O que funcionou para mim foi apenas derrubar a mesa, mesmo que ela não existisse. Então eu criei a tabela e repovoei a partir de um dump sql feito anteriormente.
Deve haver alguma metabase dos nomes das tabelas, e provavelmente ainda existia lá até que eu a soltasse.
fonte
Teve um problema semelhante com uma mesa fantasma. Felizmente teve um despejo de SQL antes da falha.
No meu caso, eu tive que:
/var/mysql
off para um backup/var/mysql/{dbname}
NOTA: Requer arquivo de despejo.
fonte
/var/lib/mysql
vez de/var/mysql
Faça o mysqldump no banco de dados:
Restaurar banco de dados
Agora todas as tabelas no banco de dados foram restauradas completamente. Experimentar..
fonte
Eu instalei o MariaDB em um novo computador, parei o serviço Mysql renomeado pasta de dados para dados - resolvi meu problema ao copiar apenas Mysql \ data \ table_folders e ibdata1 da pasta de dados MySql HD travada para a nova pasta de dados mysql instalada.
Ignorei ib_logfile0 e ib_logfile1 (caso contrário, o servidor não iniciou o serviço)
Iniciado o serviço mysql.
Então o servidor está em execução.
fonte
Parece que o problema tem a ver (pelo menos no meu e em alguns outros) com arquivos de log inválidos (corrompidos?) Do innodb. De um modo geral, eles simplesmente precisam ser recriados.
Aqui estão as soluções, a maioria das quais requer a reinicialização do mysql.
fonte
Aqui está outro cenário (atualização de versão) :
Reinstalei meu sistema operacional (Mac OS El Captain) e instalei uma nova versão do mysql (usando o homebrew). A versão instalada (5.7) era mais recente que a anterior. Depois copiei as tabelas, incluindo os arquivos ib *, e reiniciei o servidor. Eu podia ver as tabelas no banco de dados mysql, mas quando tentei selecionar qualquer coisa, obtive "Tabela não existe".
Solução:
mysql.server stop
oubrew services stop mysql
mysqld_safe --user=mysql --datadir=/usr/local/var/mysql/
(altere o caminho conforme necessário)mysql_upgrade -u root -p password
(em outra janela do terminal)mysqladmin -u root -p password shutdown
mysql.server start
oubrew services start mysql
Os documentos relevantes estão aqui .
fonte
No meu caso, eu havia definido um gatilho na tabela e, em seguida, estava tentando inserir a linha na tabela. parece que, de alguma forma, o gatilho estava errado e, portanto, o insert estava dando erro, a tabela não existe.
fonte
É possível que você tenha um personagem oculto no nome da sua tabela. Aqueles não aparecem quando você faz um show tables. Você pode fazer um "SHOW CREATE TABLE TABLE_ONE" e completar a guia "TABLE_ONE" e ver se ele coloca caracteres ocultos. Além disso, você já tentou largar e refazer as tabelas. Apenas para garantir que não haja nada errado com os privilégios e que não haja caracteres ocultos.
fonte
O mesmo problema exato após a importação do backup do TimeMachine. Minha solução foi parar o servidor MySQL e corrigir permissões de leitura e gravação nos arquivos ib *.
fonte
Acho que vale a pena trazer uma outra resposta aqui (porque eu vim aqui com o mesmo problema e isso acabou sendo a resposta para mim):
Verifique se o nome da tabela na sua consulta está escrito exatamente o mesmo que no banco de dados.
Uma coisa óbvia para iniciantes, mas coisas como "usuário" vs "usuários" podem enganar as pessoas, e eu pensei que seria uma resposta útil ter na lista aqui. :)
fonte
No meu caso, quando eu estava importando o arquivo sql exportado, estava recebendo um erro como a tabela não existe para a consulta de criação de tabela.
Percebi que havia um sublinhado no nome do meu banco de dados e o mysql estava colocando um caractere de escape logo antes disso.
Então eu removi esse sublinhado no nome do banco de dados, tudo deu certo.
Espero que ajude outra pessoa também.
fonte
De alguma forma, minha mesa foi renomeada para,
' Customers'
ou seja, com um espaço à esquerdaIsso significava
a) consultas quebradas
b) a tabela não apareceu onde era esperado na ordem alfabética das minhas tabelas, o que em meu pânico significou que eu não podia vê-la!
fonte
No meu caso, foi
SQLCA.DBParm
parâmetro.eu usei
mas deve ser
Explicação:
Você vai combinar três strings:
Não use espaços nas marcas de referência. Agradeço ao meu colega Jan.
fonte
Vá para:
xampp\mysql\data\dbname
dentro do dbname, os arquivos tablename.frm e tablename.ibd.
remova-o e reinicie o mysql e tente novamente.
fonte
Copie apenas o
ibdata1
arquivo do seu diretório de dados antigo. Não copieib_logfile1
ouib_logfile0
arquivos. Isso fará com que o MySQL não inicie mais.fonte
Veio atravessar o mesmo problema hoje. Este é um problema "Identifier Case Sensitivity" do mysql.
Por favor, verifique o arquivo de dados correspondente. É muito provável que o nome do arquivo esteja em minúsculas no sistema de arquivos, mas o nome da tabela listado no comando "show tables" esteja em maiúsculas. Se a variável de sistema "
lower_case_table_names
" for 0, a consulta retornará "tabela inexistente" porque as comparações de nome diferenciam maiúsculas de minúsculas quando "lower_case_table_names
" é 0.fonte
Eu tive o mesmo problema no Windows. Além de copiar os arquivos ib * e o diretório mysql no diretório thd data, também tive que corresponder ao arquivo my.ini.
O arquivo my.ini da minha instalação anterior não tinha a seguinte linha:
Mas minha nova instalação fez. Possivelmente porque eu não tinha essa opção no instalador mais antigo. Eu removi isso e reiniciei o serviço e as tabelas funcionaram conforme o esperado. Resumindo, verifique se o novo arquivo my.ini é uma réplica do antigo, com a única exceção sendo o datadir, o dir-do-plugin e o número da porta, dependendo da sua nova instalação.
fonte