Återvinna MySQL tabeller när endast den frm filer och ibd är tillgängliga

Hur man löser “MySQL fel #1146 -Tabell finns inte” orsakas genom att flytta .IDB filer (InnoDB) direkt mellan kataloger (matsked).

logo_mysql

Problemet

Många av de problem vi har är problem vi skapat. Jag hade precis satt upp en webbplats som använder WordPress och tänkte: Vad sägs om att se hur detta fungerar i PHP 7? Okej, som min WampServer används PHP 5.6, så jag fick “Lycklig” idé att uppgradera den WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, PHP 5.5.12) för WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP och Php 7.0.10).

Självklart, Startat av säkerhetskopiering, men min stora slip var väljer att inte exportera SQL från sådan webbplats, Istället, gjorde bara en kopia av filerna MySQL (MySQL/data) och tillämpning (www/webbplats). Jag var säker på att det skulle fungera, som andra gånger.

Efter installerande den ny WampServer med PHP 7, sätta de säkerhetskopiera filerna och ansökan tillbaka, bara när jag gick till testa av webbläsaren, inte visa upp webbplatsen, men skärmen av WordPress installation som om det vore en ny webbplats. Frös upp! Öppna PHPMyAdmin och kontrollera för att se om databasen var Ok och jag såg att, Trots att han är upptagna i databasen, När du klickat på toppen av tabellen för att visa data följande felmeddelande:

  MySQL Fel #1146 -Tabell <TABLE_NAME> spelar ' t finns

Jag har letat och jag fick reda på att du bara kan kopiera eller flytta filer direkt till en annan MySQL MySQL katalog om filer är MyISAM typ, de med frm filändelsen. MYD. MYI. Jag vet inte vad som hände, men min databas visades som InnoDB (.frm och idb). Tyvärr, först efter det faktum att MySQL larmade dokumentation:

  Du kan inte fritt flytta .IBD filer mellan databaskataloger som Du kan med MyISAM bord filer. 
  Tabelldefinitionen lagras i InnoDB delade registerutrymmet innehåller databasens namn. 
  Transaktionen ID och Logga in sekvensnummer som lagras i registerutrymmet filer skiljer sig också mellan databaser.

Lösning

Cheguei en ver algumas soluções simples, Mas vou descrever aqui en única que realmente funcionou para mim, apesar de parecer bem mais complexa, encontrada inget inlägg “Återställa tabellen(s) i MySQL-databas när frm eller ibd filer är endast tillgängliga“.

Antes, Emellertid, en título de conhecimento, Vale lembrar que em relação ao tipo InnoDB, MySQL din vakt struktur i filer och data i frm. ibd. Tillräckligt teori, Låt oss rakt på sak!

Steg 1: Återskapa strukturen frm filer

Som sagt, frm innehåller din tabellstruktur. Först måste vi hämta denna struktur för att sedan fylla data. Du kan göra detta 3 olika metoder beskrivs nedan, men före, Låt mig berätta något om den “MySQL-verktyg”.

MySQL-verktyg | mysqlfrm

Om du inte tänker använda den första metoden som föreslås (Online) så måste du använda verktyget “mysqlfrm” som tillhandahålls av den “MySQL-verktyg“.

Detta verktyg kommer att extrahera datastrukturen och generera tabell skapa SQL-skript. För detta, Ladda ner “MySQL-verktyg” (något som mysql-verktyg-1.6.4-winx64.msi) och installera det..

Öppna konsolen (Kommandot / Av den) och Använd kommandot CD för att flytta standardinstallationskatalogen (något som C:\C:Program FilesMySQLMySQL verktyg 1.6\). Observera att det i denna katalog finns körbara mysqlfrm.exe.

  CD "C:\C:Program FilesMySQLMySQL Utilities 1.6"

Välj bara en av metoderna nedan att extrahera din tabellstruktur som ingår i de frm filerna:

1º Metod | Online

1. Gå till webbplatsen HTTPS://Recovery.twindb.com/;
2. Klicka på menyn “Återställa strukturen” och sedan i “frm filer från.“;
3. Klicka på knappen “Webbläsare…” och välj din frm-fil; och
4. Klicka på knappen “Ladda upp” och tabell skapande skriptet kommer att visas på skärmen.

Det är möjligt att skicka flera filer frm en gång genererar ett enda skript med alla tabeller. Bara för att låta dig skapa en zip med alla dess frm innan “Webbläsare/Upload”.

2º Metod | Med hjälp av –diagnostiska

/* Generiskt exempel */
   mysqlfrm-diagnostik "<källsökvägen />/mytable.frm" > "<destination/Path/recovered_mytable.SQL>"
 
/* Exempel i praktiken med tabellen wp_posts.frm på WordPress */
   mysqlfrm --diagnostiska "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.SQL"

3º Metod | Med hjälp av –Server

/* Generiskt exempel */
  mysqlfrm-server=rot:MittLöSenOrd@localhost-port=3311 "<källsökvägen />/mytable.frm" > "<Målsökvägen />/recovered_mytable.SQL"
 
/* Exempel i praktiken med tabellen wp_posts.frm på WordPress */
  mysqlfrm --Server=rot@localhost --hamn=3307 ""(C):\wampbinmysql\mysql5.6.17\data\meubanco\wp_posts.frm" > "(C):\recovered_wp_posts.SQL"

Não use a porta do MySQL! Escolha qualquer outra disponível. Note que o comando redireciona a saída para um arquivo .sql que é salvo no caminho especificado (i fall, (C):).

Steg 2: Recrie a tabela no seu Banco de Dados

Em uma base de dados nova, crie uma tabela com o script gerado no Passo 1. Jag personligen installerat en ren version av WampServer och används PHPMyAdmin (http://localhost/phpmyadmin /) att skapa databasen och importera SQL-skriptet som skapades i steg 1 (recovered_wp_posts.SQL). Detta skript kommer att skapa 2 filer i katalogen i din MySQL-databas:

  SUA_TABELA.frm SUA_TABELA.IDB

I mitt fall, Dessa filer har skapats i (C):\wamp64binmysqlmysql5.7.14data<min plats>. IE, procure sua instalação do MySQL e note que no diretório data haverá sua base de dados e os dois arquivos citados.

Steg 3: Remova o novo arquivo .idb

Para remover o novo arquivo .idb, execute o seguinte comando SQL:

/* Generiskt exempel */
  ALTER TABLE mytable DISCARD TABLESPACE;
 
/* Exemplo na prática com a tabela wp_posts do WordPress */
  ALTER TABLE wp_posts DISCARD TABLESPACE;

Este comando remove o link entre a tabela e o tablespace (Där lagras fysiskt databasfilerna), och ta bort filen .IDB.

Steg 4: Kopiera filen .IDB gamla

Den ursprungliga .IDB-filen (de som innehåller data) måste kopieras till den plats som fick utgå i .IDB steg 3. Använd Ctrl + C och Ctrl + V eller döda dig själv med hjälp av kommandoraden.

Steg 5: Återaktivera tabellen

Den brutna länken i steg 3 behöver återställas med kommandot:

/* Generiskt exempel */
  ALTER TABLE MinTabell IMPORT TABELLUTRYMME;
 
/* Exemplo na prática com a tabela wp_posts do WordPress */
  ALTER TABLE wp_posts IMPORT TABELLUTRYMME;

Oroa dig inte om du får några varningar, Emellertid, Det kan vara allmänna fel visas följande fel:

  #1808 - Schemat mismatch (Bordet har ROW_TYPE_DYNAMIC rad-format, .IBD filen har ROW_TYPE_COMPACT rad format.)

I detta fall, Detta hände på grund av olikt än mysql 5.7.14 (NYA) skapar en standardtabell jämfört med Mysql-5.6.17 (GAMLA), SEM o ROW_FORMAT = kompakt.

Så, Se você está usando MySQL > = ao mysql5.7.14, Tudo que você precisa fazer é acrescentar ROW_FORMAT = kompakt na definição de criação da tabela.

  CREATE TABLE 'wp_posts' (. . .) MOTORN=InnoDB ROW_FORMAT=kompakt

Outros erros

Apenas para deixar registrado, Antes de obter sucesso na extração de dados göra frm, tiva alguns erros:

  # Källa på localhost: ... anslutna.
  # Starta lekt servern på port 3304 ... FEL som försöker stoppa misslyckades lekt server.  Process-id = 6648.
  FEL: Spawn server åtgärden misslyckades. Klon serverfel: Det går inte att kommunicera med nya instans. Process-id = 6648.. Att diagnostisera, kör verktyget igen och användning den --utförlighet alternativet att visa meddelanden från lekt servern och korrigera eventuella fel presenteras sedan köra verktyget igen.
  FRAMGÅNG: Processen med PID 6648 (barn processen med PID 7264) har avslutats.
Traceback (senaste samtalet sist):
  Fil "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", linjen 27, i <modul>
  Fil "scripts\mysqlfrm.py", linjen 422, i <modul>
  Fil ".\mysql\utilities\command\read_frm.py", linjen 439, i read_frm_files
  Fil ".\mysql\utilities\command\read_frm.py", linjen 166, i _spawn_server
  Fil ".\mysql\utilities\command\serverclone.py", linjen 180, i clone_server
  Fil ".\mysql\utilities\common\tools.py", linjen 273, i get_mysqld_version IOError: [Errno 13] Åtkomst nekad: 'version_check'

I det specifika fallet med WordPress, du behöver ta bort skriptet som genererade SQL genereras. frm, Alla angivelser standard ‘0000-00-00 00:00:00’, annars, kommer att fånga felet:

  #1067 - Standardvärde (standard) ej giltig för 'comment_date'

Det är det!

Teckensnitt

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

Totalt antal träffar: 21400

12 kommentarer till “Återvinna MySQL tabeller när endast den frm filer och ibd är tillgängliga

  1. Rodrigo sade:

    Vad du gör när du ser följande felmeddelande: #1815 – Internt fel. Kan inte återställa LSNs i tabell “min plats”.”myTable”: Data struktur korruption.
    Jag kan köra skären av data manuellt? Hur du gör detta?
    Sedan redan tack.

  2. Cristian U sade:

    Hej Taylor,

    Hur löste du detta fel:
    FEL: Spawn server åtgärden misslyckades. Klon serverfel: Det går inte att kommunicera med ny instans. Process-id = 6648.. Att diagnostisera, kör verktyget igen och använda den –utförlighet alternativet att visa meddelanden från lekt servern och korrigera eventuella fel presenteras sedan köra verktyget igen.
    FRAMGÅNG: Processen med PID 6648 (barn processen med PID 7264) har avslutats.

    Jag fortsätter att få samma meddelande och jag don t vet hur ´ ska lösa det..

    Tack

  3. Reginaldo Luiz de Freitas sade:

    Grattis Taylor, men didaktiska omöjligt!! du är samma kille!

    kram och tack för att dela din upplevelse!

Lämna svar

I din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *