Å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\datummybankwp_posts.Frm" > "(C):\recovered_wp_posts.SQL"

Använd inte MySQL-porten! Välj någon annan tillgänglig. Observera att kommandot omdirigerar utdata till en fil .sql som sparas i den angivna sökvägen (i fall, (C):).

Steg 2: Återskapa tabellen i din Databas

I en ny databas, skapa en tabell med skriptet som genereras i Steg- 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, leta efter din MySQL-installation och notera att i Datum där vilja bli din data banken och den två arkivera citerat.

Steg 3: Ta bort den nya .idb-filen

Så här tar du bort den nya .idb-filen, köra följande SQL-kommando:

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

Este comando ta bort o länk entre en 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: 87863

21 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!

  4. Marcellus Menezes sade:

    Vilket fantastiskt tips, var orolig att han skulle förlora allt… Du sparade ett månadslångt jobb… Tack!!!!

  5. Thiago Tomais sade:

    Morfar, ville bara tacka dig för att du delar med dig av dina kunskaper på ett organiserat och tydligt sätt! Hjälpte mig mycket! Tack, Samma!

  6. Renato sade:

    Hej,
    Med mig har jag nämnt följande fel i steget 5:
    FEL 1812 (HY000): Tablespace saknas för tabell 'bdTest'.'tblMov'.

    vet hur man berättar för mig hur man löser detta fel?

    Tacksam

  7. Mapache (kartvärk) sade:

    Hola, Jag har ett problem, det visar sig att jag avinstallerade xampp eftersom apache inte fungerade för mig, tydligt installerat om den och vad som lämnade mig från den tidigare mappen i xampp, i data, solo me quedaron las carpetas que llevan los nombres de las bases de datos que tenía antes allí, y solo tengo los archivos .frm y .ibd, la verdad es que no logre tillämpa bien el handledning, mig podrias samarbeta porfavoooorrrr

  8. Aline sade:

    Snälla, Jag följde din handledning men i slutändan min presenterade ett annat fel:

    #1808 – Schemat mismatch (Förväntad FPS_SPACE_FLAGS=0x0, .ibd-filen innehåller 0x21.)

    Jag såg att från en mysql till en annan kan det ha olika tabell rad format som orsakar detta fel som ska visas, emellertid skulle det inte har en långt att konvertera formatera av det importerade bordlägger till samma som används i mysql i ifrågasätter, så att den inte har denna konflikt? Om det finns en sql-kommando som gör detta och gör importen vänligen om du kan skriva det jag tackar er eftersom jag inte förstår mycket.. Snälla hjälp mig och jag försöker att återvinna en brådskande plats… versionen av min mysql är :
    Serverversion: 10.1.25-Mariadb

Lämna en kommentar

I din e-postadress kommer inte att publiceras.