Eu salvei anteriormente uma cópia do diretório / var / lib / mysql / ddms ("ddms" é o nome do esquema). Agora instalei um novo MySQL em um Ubuntu 10.04.3 LTS recém-instalado apt-get install mysql-server
, executando , acredito que a versão 5.1 foi instalada. Depois de copiar o diretório ddms em / var / lib / mysql, algumas de suas tabelas funcionam bem. Essas são as tabelas com um conjunto associado de três arquivos: um arquivo .frm, um arquivo .MYD e um arquivo .MYI.
No entanto, existem duas tabelas com um conjunto diferente de arquivos: um arquivo .frm e um arquivo .ibd. Essas duas tabelas não apareceram na lista de tabelas no phpMyAdmin. Quando olho para o log de erros, ele diz:
[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
Por favor, ajude a restaurar essas duas tabelas. Obrigado.
Respostas:
As tabelas InnoDB não podem ser copiadas da mesma maneira que as tabelas MyISAM.
Apenas copiar os arquivos .frm e .ibd de um local para outro está causando problemas. A cópia do arquivo .frm e .ibd de uma tabela do InnoDB só é boa se, e somente se, você puder garantir que o ID do espaço de tabela do arquivo .ibd corresponda exatamente à entrada do ID do espaço de tabela nos metdados do arquivo ibdata1 .
Escrevi duas postagens no DBA StackExchange sobre esse conceito de identificação de espaço de tabela
Aqui está um link excelente sobre como reconectar qualquer arquivo .ibd ao ibdata1 no caso de IDs de espaço de tabela incompatíveis: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Depois de ler isso, você deve perceber imediatamente que copiar arquivos .ibd é simplesmente louco.
Você pode aplicar as sugestões no link Calendário do Chris ou voltar à instalação antiga do mysql, inicializando o mysql e depois mysqldump no
ddms
banco de dados. Em seguida, importe esse mysqldump para sua nova instância do mysql. Confie em mim, isso seria muito mais fácil.fonte
How to Recover an InnoDB table whose files were moved around
literalmente salvou minha vida. Muito obrigado.Recentemente, experimentei esse mesmo problema. Aqui estão as etapas que eu usei para resolvê-lo sem ter que mexer com o ID do espaço de tabela, como menciona RolandoMySQLDBA acima. Estou em um Mac e usei o MAMP para restaurar o banco de dados a um ponto em que pudesse exportá-lo em um despejo do MySQL.
Você pode ler a postagem completa do blog aqui: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
Você deve ter:
-ibdata1
-ib_logfile0
-ib_logfile1
Arquivos -.FRM da sua pasta mysql_database
Instalação -Fresh do MAMP / MAMP Pro que você está disposto a destruir (se necessário)
Copie todas as pastas e arquivos incluídos no arquivo da pasta mysql do servidor de produção (ambiente mt Plesk no meu caso), EXCETO NÃO SUBSTITUI:
- / Aplicativos / MAMP / db / mysql / mysql /
- / Aplicativos / MAMP / db / mysql / mysql_upgrade_info
- / Aplicativos / MAMP / db / mysql / performance_schema
E pronto, agora você deve conseguir acessar os bancos de dados do phpMyAdmin, que alívio!
Mas não terminamos, agora você precisa executar um mysqldump para restaurar esses arquivos no seu ambiente de produção, e a interface phpmyadmin atinge o tempo limite para grandes bancos de dados. Siga os passos aqui:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Copiado abaixo para referência. Observe que em uma instalação padrão do MAMP, a senha é "root".
Como executar o mysqldump para MAMP usando o Terminal
BASE DE DADOS DE EXPORTAÇÃO DO MAMP [1]
Passo um: Abrir uma nova janela do terminal
Passo dois: Navegue até a instalação do MAMP digitando a seguinte linha no terminal cd / applications / MAMP / library / bin Pressione a tecla Enter
Passo três: Escreva o comando dump ./mysqldump -u [USERNAME] -p [DATA_BASENAME]> [PATH_TO_FILE] Pressione a tecla Enter
Exemplo:
Dica rápida: para navegar rapidamente para uma pasta, você pode arrastar a pasta para a janela do terminal e ela gravará o local da pasta. Foi um ótimo dia quando alguém me mostrou isso.
Etapa quatro: Essa linha de texto deve aparecer após você pressionar Enter. Digite a senha: Então, adivinhe, digite sua senha, lembre-se de que as letras não aparecerão, mas elas estão lá. Pressione a tecla Enter
Etapa 5: verifique o local onde você armazenou seu arquivo, se ele estiver lá, SUCESSO Agora você pode importar o banco de dados, que será descrito a seguir.
Agora que você tem uma exportação do seu banco de dados mysql, pode importá-lo no ambiente de produção.
fonte
Recuperei meus arquivos MySQL 5.5 * .ibd e * .frm usando o MySQL Utilites e o MariaDB 10.
1) Gerando Criar SQLs.
Você pode obter seu sql de criação a partir do arquivo frm. Você deve usar: https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfrm.html
shell> mysqlfrm --server = root: pass @ localhost: 3306 c: \ MY \ t1.frm - -port = 3310
contrário, você pode criar seus sql's.
2) Crie suas tabelas
Crie suas tabelas no banco de dados.
3) alter table xxx descartar tablespace
Descarte suas tabelas que você deseja substituir seus arquivos * .ibd.
4) Copie seus arquivos * .ibd (MySQL ou MariaDB) para o caminho de dados do MariaDB
Primeiro eu tento usar o MySQL 5.5 e 5.6 para restaurar, mas o banco de dados trava e para imediatamente sobre o erro de identificação de espaço de tabela. ( ERRO 1030 (HY000): erro -1 do mecanismo de armazenamento )
Depois de usar o MariaDB 10.1.8 e recuperar meus dados com êxito.
5) alterar tabela xxx importar espaço de tabela
Quando você executa esta instrução, o MariaDB avisa sobre o arquivo, mas não é importante que recuperar seus dados :) O banco de dados ainda continua e você pode ver seus dados.
Espero que esta informação seja útil para você.
fonte
mysqlfrm
(versões experimentadas 1.3.5 e 1.6.5 com MySQLs 5.6 e 5.7) não tenham dado aCREATE
definição correta , mesmo quando o MySQL 5.7 ( o ROW_FORMAT padrão foi alterado no MySQL 5.7.9 ) resultando naSchema mismatch (Expected FSP_SPACE_FLAGS=0x21, .ibd file contains 0x0.)
importação do espaço de tabela. A adição manualROW_FORMAT=compact
no final daCREATE
declaração fez o truque.Manually adding ROW_FORMAT=compact at the end of the CREATE statement did the trick.
Isso funcionou para mim também. Obrigado! 👍Eu tive exatamente o mesmo problema apenas com os arquivos como backup.
O que fiz para resolvê-lo foi copiar os arquivos do banco de dados em / var / lib / mysql / yourdb e ibdata1, que é colocado em / var / lib / mysql.
Pude verificar se consegui acessar as tabelas mysql -u root -p dbname e consultar algumas das tabelas que estavam corrompidas anteriormente.
Fiz um despejo do banco de dados posteriormente com mysqldump -u root -p [root_password] [database_name]> dumpfilename.sql
fonte
Se você estiver usando o MAMP e não conseguir iniciar o MySQL depois de copiar seus arquivos, coloquei o arquivo
innodb_force_recovery = 2
dentromy.ini
e consegui que o mysql iniciasse e exportasse meu banco de dados.fonte
Se você conseguir restaurar o arquivo * .ibd no servidor MySQL original, não se esqueça de restaurar também os direitos de acesso ao arquivo. No meu caso (MySQL8 no CentOS7), restaurei o arquivo para /var/lib/mysql/db/tablename.ibd e executei:
Antes de corrigir os direitos de acesso, o acesso à tabela resultou no erro "O servidor MySQL 2006 foi desativado". Após corrigir os direitos de acesso, a tabela funcionou (mesmo sem a reinicialização do serviço mysqld).
fonte
Reuni postagens de tópicos semelhantes (cujas respostas não foram publicadas aqui):
solução 1: https://dba.stackexchange.com/a/59978
solução 2: https://dba.stackexchange.com/a/71785 (+ outro post lá)
solução 3: kit de recuperação para tabelas: https://twindb.com/how-to-recover-innodb-dictionary/
solução 4: recuperar banco de dados MySQL da pasta de dados sem ibdata1 dos arquivos ibd
solução 5: usando
mysqlfrm
comandosolução 6: https://dba.stackexchange.com/a/159001
solução 7: https://dba.stackexchange.com/a/144573
fonte
Eu só quero adicionar mais uma coisa para os usuários do macos El Capitan. Os utilitários MySQL não são suportados para esta versão, portanto, o comando mysqlfrm não é útil. O que fiz foi recuperar minhas estruturas de tabela com o dbsake, como mostrado neste link: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files-using-dbsake/
Tudo que você precisa fazer é instalar o dbsake:
use o comando frmdump e forneça o caminho para o seu arquivo .frm:
você receberá a instrução create. Depois de fazer isso, simplesmente segui as etapas 2 a 5 já mencionadas pelo @Ecd. Espero que ajude alguém.
fonte
Eu realmente aprecio Ecd. O que funcionou para mim:
1.- Eu tinha um backup da base há alguns meses, isso me ajudou a levantar esse backup no xampp no Windows 10 e criar as tabelas para ter a estrutura (configuração: Windows 10, xampp-windows-x64-7.1.30- 5-VC14) arquivo de configuração mysql my.ini no final
2.- Com o banco de dados antigo ativado, continuei executando a alteração da tabela xxx para descartar o espaço de tabela para cada tabela no banco de dados que desejava recuperar e, em seguida, os arquivos .ibd da pasta de dados em C: / xampp / mysql / data / system foi excluído (neste caso, é este caminho)
3.- Continuei copiando os arquivos .ibd do banco de dados que desejava recuperar para a pasta xampp do banco de dados antigo
4.- Após copiar os arquivos, execute: alter table xxx import tablespace Para cada tabela no banco de dados, um aviso aparecerá, mas nós o ignoraremos, os dados serão carregados na tabela e poderão ser exportados posteriormente.
5.- Exporte todo o banco de dados para um arquivo sql e prossiga para construí-lo em produção e sucesso!
Espero que ajude alguém que tenha essa situação, cumprimentos.
Inglês fornecido pelo Google
fonte
tente executar isso com utilitários mysql
comando / shell promt
fonte