AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 8087
Accepted
Mokus
Mokus
Asked: 2011-11-18 23:38:58 +0800 CST2011-11-18 23:38:58 +0800 CST 2011-11-18 23:38:58 +0800 CST

Erro de seleção de INFORMAÇÃO_SCHEMA

  • 772

Estou tentando selecionar dados de information_schema, mas estou recebendo o seguinte erro. Como posso consertar isso?

mysql> SELECT * FROM information_schema.tables ;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)
mysql ubuntu
  • 4 4 respostas
  • 4604 Views

4 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2011-11-19T05:50:52+08:002011-11-19T05:50:52+08:00

    Acho esse erro particularmente perturbador porque o MySQL introduziu o INFORMATION_SCHEMA com a introdução do MySQL 5.0. A resposta de @gbn mostra que esse bug

    • volta para o MySQL 5.0.16
    • foi relatado em QUALQUER operação com este
    • foi baseado no erro ocorrido no sistema operacional IBM AIX 5.3 ML2
    • foi fechado 2006-01-26

    A definição de banco de dados do MySQL é simplesmente uma subpasta em datadir.

    Agora, aqui está o motivo pelo qual considero o erro particularmente perturbador: O banco de dados INFORMATION_SCHEMA não deve ser uma pasta manifestada em datadir.

    Por exemplo

    • datadir é /var/lib/mysql
    • Você tem dois bancos de dados: db1 e db2

    Vá para o sistema operacional e execute o seguinte:

    cd /var/lib/mysql
    ls -l
    

    Você verá várias pastas:

    • mysql
    • db1
    • db2
    • teste (já que o padrão do MySQL instala um banco de dados de teste)
    • . (diretório atual)
    • .. (diretório pai)

    No mysql, quando você faz SHOW DATABASES;, você não deve ver .e ... O código-fonte teria garantido isso. Agora, onde está o INFORMATION_SCHEMA? Adivinha? Todas as tabelas em INFORMATION_SCHEMA são tabelas temporárias e usam o mecanismo de armazenamento de memória. Observe também que você não vê uma pasta chamada INFORMATION_SCHEMA. Agora, confira a definição de INFORMATON_SCHEMA.TABLES:

    mysql> use information_schema
    Database changed
    mysql> show create table tables\G
    *************************** 1. row ***************************
           Table: TABLES
    Create Table: CREATE TEMPORARY TABLE `TABLES` (
      `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
      `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
      `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
      `TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
      `ENGINE` varchar(64) DEFAULT NULL,
      `VERSION` bigint(21) unsigned DEFAULT NULL,
      `ROW_FORMAT` varchar(10) DEFAULT NULL,
      `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
      `AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
      `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
      `MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
      `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
      `DATA_FREE` bigint(21) unsigned DEFAULT NULL,
      `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
      `CREATE_TIME` datetime DEFAULT NULL,
      `UPDATE_TIME` datetime DEFAULT NULL,
      `CHECK_TIME` datetime DEFAULT NULL,
      `TABLE_COLLATION` varchar(32) DEFAULT NULL,
      `CHECKSUM` bigint(21) unsigned DEFAULT NULL,
      `CREATE_OPTIONS` varchar(255) DEFAULT NULL,
      `TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT ''
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8
    1 row in set (0.05 sec)
    

    Eu coloco toda a culpa por este erro no código-fonte porque, assim como o mysql ignora .e ..como pastas de casos especiais que não devem ser consideradas bancos de dados, o INFORMATION_SCHEMA também deve ser considerado uma pasta de casos especiais, uma pasta de casos especiais que não possui um arquivo manifesto no datadir.

    Eu recomendo apenas atualizar o MySQL para a versão mais recente porque, como @gbn descobriu, houve um relatório de bug, mas está marcado como fechado. Isso só poderia acontecer

    • se você ainda estiver executando uma versão muito antiga do mysql
    • esta situação não foi tratada adequadamente no código-fonte do sistema operacional Ubuntu

    @gbn recebe +1 de mim por encontrar o relatório de bug que me ajudou a olhar um pouco mais fundo

    • 4
  2. gbn
    2011-11-19T00:32:22+08:002011-11-19T00:32:22+08:00

    Erro de permissões, relatado como um (antigo) bug do MySQL

    Confira o bit de permissões nos documentos de instalação do MySQL

    • 3
  3. Sysop100
    2012-09-24T21:59:50+08:002012-09-24T21:59:50+08:00

    No MySQL Versão 5.5, o NFORMATION_SCHEMAdiretório/pasta existe; Eu estou assumindo que isso acontece em outras versões. Não é controlado na configuração de my.iniou my.cnfcomo datadir=whatever; ele parece estar predefinido no caminho de instalação do MySQL e é lido quando o MySQL é carregado pela primeira vez na inicialização.

    Não há my.iniou my.cnfconfiguração para colocar a localização deste esquema. Isso parece se aplicar às versões Unix/Linux e Windows do MySQL 5.5 e pode remontar a quando esse esquema foi introduzido pela primeira vez. Eu fui de 4.1 para 5.5 nas caixas Windows e Unix, então não sei sobre as versões intermediárias.

    Esqueci de mencionar que a pasta no meu caso não é o nome do esquema, mas apenas outra pasta chamada simplesmente MySQLcom o seguinte arquivo de catálogo/XML nomeado information_schema.mbpcontendo os dados abaixo, como você pode ver em seu cliente MySQL Admin. Eu acho que esta é a cópia que carrega na memória na inicialização. Vejo que minha versão parece ser mais longa que a sua e a minha também tem uma seção de configuração do usuário.

    Se você não fizer backup disso com o regular datadirou sqldumpem meus sistemas, perderá a configuração e as permissões do usuário. Existem outros arquivos semelhantes contendo os dados reais das tabelas. Acho que a .mbpextensão é usada para indicar um backup ou cópia do mecanismo de memória. Eu sabia que tinha que estar armazenado em algum lugar e tinha que haver uma maneira de acessá-lo.

    Eu importei minhas configurações e permissões de usuário antigas quando atualizei para 5.5. Eles foram enviados para este banco de dados pelo servidor. No entanto, não foi salvo como no passado. Portanto, se e quando você estiver usando minha versão, precisará fazer backup deste arquivo ou perderá todos os seus usuários e permissões. Acho que é para isso que serve esse banco de dados embutido no meu caso.

    <?xml version="1.0"?>
    <backup_profile>
      <profile_name>information_schema</profile_name>
      <last_used></last_used>
      <options>288</options>
      <backup_type>0</backup_type>
      <tables>
        <table>
          <name>CHARACTER_SETS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>COLLATIONS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>COLLATION_CHARACTER_SET_APPLICABILITY</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>COLUMNS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>COLUMN_PRIVILEGES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>ENGINES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>EVENTS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>FILES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>GLOBAL_STATUS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>GLOBAL_VARIABLES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>KEY_COLUMN_USAGE</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>PARAMETERS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>PARTITIONS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>PLUGINS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>PROCESSLIST</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>PROFILING</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>REFERENTIAL_CONSTRAINTS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>ROUTINES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>SCHEMATA</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>SCHEMA_PRIVILEGES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>SESSION_STATUS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>SESSION_VARIABLES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>STATISTICS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>TABLES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>TABLESPACES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>TABLE_CONSTRAINTS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>TABLE_PRIVILEGES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>TRIGGERS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>USER_PRIVILEGES</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>VIEWS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_CMP_RESET</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_TRX</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_CMPMEM_RESET</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_LOCK_WAITS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_CMPMEM</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_CMP</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
        <table>
          <name>INNODB_LOCKS</name>
          <schema>information_schema</schema>
          <catalog>def</catalog>
        </table>
      </tables>
    </backup_profile>
    

    Desculpe, isso é tão grande! Eu queria mostrar a você como era e como encontrá-lo pelo nome. hmm eu não tentei, no entanto, eu me pergunto se você criou outro arquivo de dados como este em seu local atual e mesma extensão de arquivo se ele o carregasse na inicialização? Isto é, se você realmente deseja criar um banco de dados dessa maneira.

    • 2
  4. Tony Mays
    2013-04-11T11:17:54+08:002013-04-11T11:17:54+08:00

    Encontrei o problema ao criar tabelas temporárias para um procedimento armazenado. Eu queria usar a exibição information_schema.tables para pesquisar minha tabela temporária para determinar se eu tentaria criar uma instrução de tabela temporária ou excluí-la da própria tabela temporária. No entanto, a visualização information_schema.tables nunca mostrou que existia, então meu código escrito como abaixo não funcionaria corretamente:

    declare v_table_exists int;
    select count(*) from information_schema.tables where table_name = 'MY_TEMP_TABLE';
    if v_table_exists = 0 then
       create temporary table MY_TEMP_TABLE(...);
    else
       delete from MY_TEMP_TABLE; // sets up for the next iteration within the same session
    end if;
    

    Eu descobri uma solução alternativa que é satisfatória. Eu reescrevi o código acima como o seguinte:

    create temporary table if not exists MY_TEMP_TABLE(...);
    delete from MY_TEMP_TABLE;
    

    Descobri que esta solução me forneceu o armazenamento temporário em uma sessão enquanto trabalhava adequadamente.

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve