Não tenho muita experiência com MySQL e estou tentando consertar alguns bancos de dados.
No mysql, um "SHOW DATABASES" mostra (entre outros) o banco de dados principal "MainDB" e outro banco de dados "MainDB.res" . Se estou tentando DUMP ou USE esse segundo banco de dados (com ``
o nome), recebo o erro
ERROR 1102 (42000): Incorrect database name 'MainDB.res'
.
O dump do MainDB funciona sem problemas. Agora, estou me perguntando se MainDB.res é algum banco de dados especial ou talvez gerado automaticamente para o qual o administrador do MySQL não tem direitos? Como posso consultar esse banco de dados?
Informações detalhadas:
Originalmente, eu queria ver todas as conexões ibfk entre todas as tabelas.
Agora estou procurando um bug nos bancos de dados porque não consigo olhar para information_schema, como
mysql> SELECT * FROM information_schema.KEY_COLUMN_USAGE;
resultado na mensagem de erro
ERROR 1103 (42000): Incorrect table name 'accessgroup'
e li algumas postagens no fórum sugerindo que o erro ocorre porque mais de uma tabela foi encontrada com esse nome e renomeá-lo pode resolver o problema. Essa é a razão pela qual eu queria dar uma olhada em "MainDB.res" em primeiro lugar...
EDITAR:
MainDB.res/ é de fato um diretório (em /var/lib/mysql/) contendo alguns, mas não todos os arquivos no diretório MainDB/. Alguns arquivos ausentes são do tipo .frm, alguns .MYD e .MYI. 'accessgroup.frm' está em ambos os diretórios. (Não posso anonimizar a saída de ls -l o suficiente para colá-la aqui.) Vou tentar o que acontece se eu mover o diretório MainDB.res para outro lugar.
O MainDB.res não é o banco de dados atual. Alguém por engano o criou em seu diretório de dados.
Dê uma olhada no conteúdo do meu datadir
onde world.res é o diretório que eu criei como
e agora quando eu quiser acessá-lo no MySQL Shell, veja o resultado (O world.res é criado como #mysql50#world.res por si só. )
Então, na minha opinião, o MainDB.res não é o banco de dados.
ATUALIZAR
No MySQL você não pode criar o Banco de Dados que contém a palavra "."
então é certo que aquele não era o seu banco de dados.
se pensar se um banco de dados "MainDB.res" é mostrado, existe um diretório "MainDB.res" no diretório mysql. Talvez você tenha criado este diretório com ferramentas do sistema operacional. Qual é o conteúdo do diretório "MainDB.res"?
A resposta por milagre173 me apontou na direção certa:
O banco de dados 'MainDB.res' provavelmente era um backup de 'MainDB' copiando o diretório. Dessa forma, a cópia foi vista pelo MySQL como outro banco de dados e isso invalidou as entradas em 'information_schema', assim como os bancos de dados 'MainDBOld', 'MainDBTest' e 'mysql.old'...
Depois que movi 'MainDB.res' para fora do diretório MySQL, o ERROR 1103 mudou para
ERROR 1103 (42000): Incorrect table name 'columns_priv'
(o nome da tabela mudou).Depois de mover todas as "duplicatas" (sempre parando o mysqld), a consulta
SELECT * FROM information_schema.TABLE_CONSTRAINTS;
funcionou imediatamente.