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 / 48166
Accepted
Mike
Mike
Asked: 2013-08-15 20:48:14 +0800 CST2013-08-15 20:48:14 +0800 CST 2013-08-15 20:48:14 +0800 CST

Não é possível abrir a tabela mysql/innodb_index_stats [duplicado]

  • 772
Essa pergunta já tem respostas aqui :
InnoDB: Erro: Tabela "mysql".."innodb_table_stats" não encontrada após atualização para mysql 5.6 (2 respostas)
Fechado há 6 anos .

Após uma nova instalação do XAMPP e importação do meu linux live db que está funcionando para o Windows Dev-stage, comecei a encontrar problemas com arquivos INSERT. Todo o resto parece funcionar bem.

Os erros que recebo no mysql_error.logsão:

2013-08-15 12:44:49 16c0 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-08-15 12:44:49 16c0 InnoDB: Recalculation of persistent statistics requested for table "sizaradb"."pages" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.
2013-08-15 12:44:59 16c0 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-08-15 12:44:59 16c0 InnoDB: Recalculation of persistent statistics requested for table "sizaradb"."translations" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.

Não consigo abrir a tabela mysql/innodb_index_statsdo dicionário de dados interno do InnoDB embora o arquivo .frm para a tabela exista

Tentei corrigi-lo pesquisando os erros no Google e tentando ver correções de outras pessoas, mas ainda não está funcionando. Estou trabalhando nisso há 2 dias.

Por favor me ajude a resolver.

mysql innodb
  • 5 5 respostas
  • 80658 Views

5 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2013-08-16T06:55:07+08:002013-08-16T06:55:07+08:00

    PROBLEMA

    No MySQL 5.6, ibdata1inclui 5 InnoDB no mysqlesquema.

    mysql> select table_name from information_schema.tables
        -> where table_schema='mysql' and engine='InnoDB';
    +----------------------+
    | table_name           |
    +----------------------+
    | innodb_index_stats   |
    | innodb_table_stats   |
    | slave_master_info    |
    | slave_relay_log_info |
    | slave_worker_info    |
    +----------------------+
    5 rows in set (0.00 sec)
    
    mysql>
    

    Nas versões do MySQL anteriores a 5.6, se você desligar o mysql, excluir ibdata1e iniciar o backup do mysql, ibdata1será recriado. Se você fizer isso com o MySQL 5.6, essas 5 tabelas não serão recriadas . Mesmo que você tenha excluído ibdata1, os 10 arquivos a seguir ainda estão em /var/lib/mysql/mysql:

    • innodb_index_stats.frm
    • innodb_index_stats.ibd
    • innodb_table_stats.frm
    • innodb_table_stats.ibd
    • slave_master_info.frm
    • slave_master_info.ibd
    • slave_relay_log_info.frm
    • slave_relay_log_info.ibd
    • slave_worker_info.frm
    • slave_worker_info.ibd

    Aprendi isso desde cedo. Com um recém-criado ou danificado ibdata1, não há entradas de dicionário de dados correspondentes para essas 5 tabelas.

    No seu caso particular, suspeito que você copiou ibdata1de um servidor Linux para o servidor Windows. O MySQL/Windows espera que o dicionário de dados tenha o formato de nome de arquivo DOS. Movendo isso ibdata1para o Windows, o MySQL/Windows não pode se relacionar com o nome do arquivo e o caminho do Linux para apontar para os arquivos .frme ..ibd

    SOLUÇÃO

    PASSO 01 : Instale o MySQL em outro servidor de banco de dados

    PASSO 02 : mysqldump apenas essas 5 tabelas

    TABLELIST="innodb_index_stats"
    TABLELIST="${TABLELIST} innodb_table_stats"
    TABLELIST="${TABLELIST} slave_master_info"
    TABLELIST="${TABLELIST} slave_relay_log_info"
    TABLELIST="${TABLELIST} slave_worker_info"
    mysqldump -uroot -p mysql ${TABLELIST} > mysql_innodb_tables.sql
    

    PASSO 03 : Copie mysql_innodb_tables.sqlpara o servidor DB com tabelas inválidas.

    PASSO 04 : Executarmysql_innodb_tables.sql

    PASSO 05 : Executar FLUSH TABLES;(Opcional)

    De uma chance !!!

    • 18
  2. Mostafa Nazari
    2014-08-13T03:51:09+08:002014-08-13T03:51:09+08:00

    este bug é relatado no MySQL Forums ( 67179 ) e a solução é mencionada aqui . por favor, note que você deve fazer a limpeza, antes de criar tabelas

    /* 
      temporary fix for problem with windows installer for MySQL 5.6.10 on Windows 7 machines.
      I did the procedure on a clean installed MySql, and it worked for me, at least it stopped
      lines of innodb errors in the log and the use of transient innodb tables. So, do it at
      your own risk..
    
      1. drop these tables from mysql:
         innodb_index_stats
         innodb_table_stats
         slave_master_info
         slave_relay_log_info
         slave_worker_info
    
      2. delete all .frm & .ibd of the tables above.
    
      3. run this file to recreate the tables above (source five-tables.sql).
    
      4. restart mysqld.
    
      Cheers, 
      CNL
    */
    
    CREATE TABLE `innodb_index_stats` (
      `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `index_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `stat_value` bigint(20) unsigned NOT NULL,
      `sample_size` bigint(20) unsigned DEFAULT NULL,
      `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;
    
    CREATE TABLE `innodb_table_stats` (
      `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `n_rows` bigint(20) unsigned NOT NULL,
      `clustered_index_size` bigint(20) unsigned NOT NULL,
      `sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
      PRIMARY KEY (`database_name`,`table_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;
    
    CREATE TABLE `slave_master_info` (
      `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.',
      `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
      `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.',
      `Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'The host name of the master.',
      `User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.',
      `User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.',
      `Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.',
      `Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
      `Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
      `Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
      `Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
      `Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.',
      `Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.',
      `Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.',
      `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.',
      `Heartbeat` float NOT NULL,
      `Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
      `Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
      `Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.',
      `Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
      `Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
      `Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
      `Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
      PRIMARY KEY (`Host`,`Port`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information';
    
    CREATE TABLE `slave_relay_log_info` (
      `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
      `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
      `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
      `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
      `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
      `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
      `Number_of_workers` int(10) unsigned NOT NULL,
      `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
      PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information';
    
    CREATE TABLE `slave_worker_info` (
      `Id` int(10) unsigned NOT NULL,
      `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
      `Relay_log_pos` bigint(20) unsigned NOT NULL,
      `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
      `Master_log_pos` bigint(20) unsigned NOT NULL,
      `Checkpoint_relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
      `Checkpoint_relay_log_pos` bigint(20) unsigned NOT NULL,
      `Checkpoint_master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
      `Checkpoint_master_log_pos` bigint(20) unsigned NOT NULL,
      `Checkpoint_seqno` int(10) unsigned NOT NULL,
      `Checkpoint_group_size` int(10) unsigned NOT NULL,
      `Checkpoint_group_bitmap` blob NOT NULL,
      PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Worker Information';
    
    • 15
  3. user1433454
    2014-08-23T12:33:46+08:002014-08-23T12:33:46+08:00

    Após uma atualização, você precisa executar "mysql_upgrade -u root" e isso lidará com todas as atualizações da tabela do sistema.

    • 3
  4. Tertium
    2015-12-02T17:17:33+08:002015-12-02T17:17:33+08:00

    para mariadb10:

    CREATE TABLE `gtid_slave_pos` (
      `domain_id` int(10) unsigned NOT NULL,
      `sub_id` bigint(20) unsigned NOT NULL,
      `server_id` int(10) unsigned NOT NULL,
      `seq_no` bigint(20) unsigned NOT NULL,
      PRIMARY KEY (`domain_id`,`sub_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Replication slave GTID state';
    
    CREATE TABLE `innodb_index_stats` (
      `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `index_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `stat_value` bigint(20) unsigned NOT NULL,
      `sample_size` bigint(20) unsigned DEFAULT NULL,
      `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    
    CREATE TABLE `innodb_table_stats` (
      `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
      `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `n_rows` bigint(20) unsigned NOT NULL,
      `clustered_index_size` bigint(20) unsigned NOT NULL,
      `sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
      PRIMARY KEY (`database_name`,`table_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    
    • 3
  5. David Alistair Clough
    2014-04-11T05:04:15+08:002014-04-11T05:04:15+08:00

    Encontramos o mesmo problema na implantação do 5.6 como parte de nossos padrões, sempre instalamos a partir de .rpm e realocamos o diretório de dados após a primeira configuração. 5.5 e inferior, mudaríamos nossas configurações no /etc/my.cnf stop mysql e então tararia os diretórios do banco de dados no diretório de dados padrão e descompactaria para o nosso novo . À medida que alteramos todas as nossas configurações do innodb, obtemos um novo arquivo de dados innoddb limpo.

    Então, agora, antes de pararmos nosso servidor, executamos o seguinte no banco de dados mysql

    ALTER TABLE innodb_index_stats engine=MYISAM;
    ALTER TABLE innodb_table_stats engine=MYISAM;
    ALTER TABLE slave_master_info engine=MYISAM;
    ALTER TABLE slave_relay_log_info engine=MYISAM;
    ALTER TABLE slave_worker_info engine=MYISAM;
    

    Em seguida, movemos todos os dados para o novo local e reiniciamos o mysql seguido por outro conjunto de alterações.

    ALTER TABLE innodb_index_stats engine=INNODB;
    ALTER TABLE innodb_table_stats engine=INNODB;
    ALTER TABLE slave_master_info engine=INNODB;
    ALTER TABLE slave_relay_log_info engine=INNODB;
    ALTER TABLE slave_worker_info engine=INNODB;
    

    Isso parece funcionar bem para nós e é rápido de fazer

    • 2

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 fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 respostas
  • Marko Smith

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

    • 10 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
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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

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