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 executando apt-get install mysql-server
, 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, estas 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 eu 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.
As tabelas InnoDB não podem ser copiadas da mesma forma que as tabelas MyISAM.
Apenas copiar os arquivos .frm e .ibd de um local para outro está causando problemas. Copiar o arquivo .frm e .ibd de uma tabela InnoDB só é bom se e somente se você puder garantir que o id do tablespace do arquivo .ibd corresponda exatamente à entrada do id do tablespace nos metadados do arquivo ibdata1 .
Eu escrevi dois posts no DBA StackExchange sobre esse conceito de id de tablespace
Aqui está um excelente link sobre como reconectar qualquer arquivo .ibd ao ibdata1 no caso de ids de tablespace 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 uma loucura.
Você pode aplicar as sugestões do link Chris Calendar, ou você pode voltar para a instalação antiga do mysql, inicializar o mysql e então mysqldump o
ddms
banco de dados. Em seguida, importe esse mysqldump para sua nova instância mysql. Confie em mim, isso seria muito mais fácil.Recentemente, experimentei esse mesmo problema. Aqui estão os passos que usei para resolvê-lo sem ter que mexer no id do tablespace como RolandoMySQLDBA menciona acima. Estou em um Mac e usei o MAMP para restaurar o banco de dados para um ponto em que pudesse exportá-lo em um despejo do MySQL.
Você pode ler o post completo sobre isso 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 fresca do MAMP / MAMP Pro que você está disposto a destruir (se necessário)
Copie em 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 SUBSTITUIR:
--/Applications/MAMP/db/mysql/mysql/
--/Applications/MAMP/db/mysql/mysql_upgrade_info
--/Applications/MAMP/db/mysql/performance_schema
E pronto, agora você deve poder acessar os bancos de dados do phpMyAdmin, que alívio!
Mas ainda não terminamos, agora você precisa executar um mysqldump para restaurar esses arquivos em seu ambiente de produção, e a interface phpmyadmin expira para bancos de dados grandes. 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
EXPORTAR BANCO DE DADOS DO MAMP[1]
Primeiro passo: Abra uma nova janela de terminal
Etapa 2: Navegue até a instalação do MAMP digitando a seguinte linha no terminal cd /applications/MAMP/library/bin Pressione a tecla Enter
Terceiro Passo: Escreva o comando dump ./mysqldump -u [USERNAME] -p [DATA_BASENAME] > [PATH_TO_FILE] Aperte a tecla enter
Exemplo:
Dica rápida: para navegar para uma pasta rapidamente, você pode arrastar a pasta para a janela do terminal e ela gravará a localização da pasta. Foi um grande dia quando alguém me mostrou isso.
Passo Quatro: Esta linha de texto deve aparecer depois que 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
Quinto passo: Verifique o local de onde você armazenou seu arquivo, se 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, você pode importá-lo no ambiente de produção.
Recuperei meus arquivos *.ibd e *.frm do MySQL 5.5 usando MySQL Utilites e MariaDB 10.
1) Gerando Criar SQLs.
Você pode obter seus sql's de criação a partir do arquivo frm. Você deve usar: https://downloads.mysql.com/archives/utilities/
shell> mysqlfrm --server=root:pass@localhost:3306 c:\MY\t1.frm --port=3310
Outra maneira que você pode ter seu sql de criação.
2) Crie Suas Tabelas
Crie suas tabelas no banco de dados.
3) alter table xxx descarte 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 quebrado do tablespace id. ( ERRO 1030 (HY000): Obteve o erro -1 do mecanismo de armazenamento )
Depois de usar o MariaDB 10.1.8 e recuperei meus dados com sucesso.
5) alter table xxx import tablespace
Quando você executa esta instrução, o MariaDB avisa sobre o arquivo, mas não é importante recuperar seus dados :) O banco de dados ainda continua e você pode ver seus dados.
Espero que esta informação seja útil para você.
Eu tive exatamente o mesmo problema apenas com os arquivos como backup.
O que eu fiz para resolver foi copiar os arquivos do banco de dados em /var/lib/mysql/yourdb e o ibdata1 que é colocado em /var/lib/mysql.
Consegui então verificar se eu poderia acessar as tabelas mysql -u root -p dbname e consultar algumas das tabelas que foram corrompidas anteriormente.
Eu fiz um dump do banco de dados depois com mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
Se você estiver usando o MAMP e não conseguir iniciar o MySQL depois de copiar seus arquivos, eu coloquei
innodb_force_recovery = 2
dentromy.ini
e consegui que o mysql iniciasse e exportasse meu db.Note: Try to install MySQL same version, if your crashed MySQL version was 5.6, please install MySQL 5.6. (
brew install [email protected]
). If following process fails try the same things with MariaDB. (In my case, by MariaDB, I get back all database)Process 1
brew services stop mysql
), For MariaDBbrew services stop mariadb
Process 2
ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
end of every CREATE TABLE....ENGINE=InnoDB otherwise table may not created.mysqldump -uroot -p --databases newtestdb > testdb.sql
mysql -u root -p
SHOW DATABASES;
USE newtestdb;
ALTER TABLE tablename DISCARD TABLESPACE;
if you check newtestbd .ibd file will disapear.ALTER TABLE tablename IMPORT TABLESPACE;
(A princípio, você precisará instalar em seu SO, o pequeno pacote chamado "mysql-utilities" e usar
mysqlfrm --port=3333 your_table.frm > result.sql --basedir=/path/to/your/installation-folder/mysql
para restaurar o sql de criação de tabelas), depois disso, coletei posts de tópicos semelhantes, que não foram mencionados neste tópico:solução 0: https://dba.stackexchange.com/a/57157/44247
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: Recupere o banco de dados MySQL da pasta de dados sem ibdata1 dos arquivos ibd
solução 5: https://dba.stackexchange.com/a/159001
solução 6: https://dba.stackexchange.com/a/144573
Se você conseguir restaurar o arquivo *.ibd para o servidor MySQL original, não se esqueça de restaurar os direitos de acesso ao arquivo também. 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 resultava no erro "2006 MySQL server has been away". Após corrigir os direitos de acesso, a tabela funcionou (mesmo sem reiniciar o serviço mysqld).
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, então o comando mysqlfrm não é útil. O que eu fiz foi recuperar minhas estruturas de tabela com dbsake como mostrado neste link: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files-using-dbsake/
Tudo o que você precisa fazer é instalar o dbsake:
em seguida, use o comando frmdump e forneça o caminho para o seu arquivo .frm:
você receberá a instrução create. Feito isso, simplesmente segui os passos 2 a 5 já mencionados pelo @Ecd. Espero que ajude alguém.
Eu realmente aprecio o Ecd. O que funcionou para mim:
1.- Fiz 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.- Tendo o banco de dados antigo ativo, procedi a executar alter table xxx descarte tablespace para cada tabela do banco de dados que eu queria recuperar, então os arquivos .ibd da pasta data em C: /xampp/mysql/data/system tinha sido deletado (neste caso é este caminho)
3.- Continuei copiando os arquivos .ibd do banco de dados que queria recuperar para a pasta xampp do banco de dados antigo
4.- Tendo os arquivos copiados, execute: alter table xxx import tablespace Para cada tabela do banco de dados, aparecerá um aviso mas iremos ignorá-lo, 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!
I hope it helps someone who has this situation, regards.
English provided by Google