Recover MySQL Tables doe't allinne de .frm en .ibd triemen binne beskikber

hoe oplosse “MySQL Flater #1146 - Tabel bestiet net” feroarsake troch triemmen .idb (InnoDB) daliks tusken triemtafels (tablespace).

logo_mysql

probleem

In protte fan 'e problemen hawwe wy binne problemen wy meitsje. Ik hie krekt tariede in webside mei help fan WordPress en tinken: sa'n sjogge hoe't dat wurket yn PHP 7? ok, as myn WampServer brûkt PHP 5.6, doe ik moast “lokkich” idee opwurdearje de WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, Php5.5.12) foar WampServer 3.0.6 (Apache2.4.23, Mysql5.7.14, Php5.6.25 and Fil 7.0.10).

dúdlik, Ik begûn by reservekopy, mar myn grutte misstep wie kieze net om te eksportearjen fan de SQL sa'n Site, ynstee, krekt makke in kopy fan it MySQL triemmen (MySQL / data) en tapassing (www / site). Ik wie wis dat soe wurkje, as foarhinne.

Nei it ynstallearjen fan de nije WampServer mei PHP 7, Ik sette de MySQL reservekopy triemmen en de tapassing dêr werom, pas doe't ik wie it testen fan de blêder, net ferskynde Site, mar de WordPress ynstallaasje skerm as wie it in nije webside. jelly! Iepen PHPMyAdmin om te sjen oft de databank wie Ok en seach dat, nettsjinsteande wurdt listed de databank, as ko der op klikke op 'e tafel om te besjen op de gegevens ferskynde de folgjende fout berjocht:

  MySQL Fersin #1146 - Tafel <table_name> bestiet net

Ik haw it sykjen en ik ûntduts dat jo kinne allinnich kopiearje of ferpleatse de triemmen daliks nei in oare MySQL MySQL triemtafel as de triemmen binne it type MyISAM, dy mei ferlinging .frm .MYD .MYI. Ik wit net echt witte wat der bard, mar myn databank ferskynde as InnoDB (.FRM e .idb). spitigernôch, pas nei it evenemint seach de MySQL dokumintaasje al warskôge:

  Jo kinne net frij bewege .IBD triemmen tusken databank triemtafels as Jo kinne mei MyISAM tafel triemmen. 
  De tafel definysje opslein yn de InnoDB dield tablespace omfiemet de databank namme. 
  De transaksje IDs en lochboek sequence oantallen opslein yn de tablespace triemmen ek ferskille tusken databases.

oplossing

Ik krige te dwaan wat ienfâldige oplossings, mar ik sil beskriuwe hjir it ien dy't echt wurke foar my, hoewol't it liket fier komplekser, Post net fûn “Restoring tafel(s) yn MySQL database as FRM of IBD triemmen binne beskikber allinne“.

foar't, lykwols, by wize fan kennis, it is de muoite wurdich ûnthâlden dat ferlike mei InnoDB, MySQL hâldt syn struktuer yn .frm triemmen en gegevens yn .ibd. Enough teory, lets get omleech nei!

stap 1: Re-create de struktuer fan .frm

lykas ik sei, .frm befettet de struktuer fan in tabel. Earst moatte wy herstellen dat struktuer en dan nei populêre gegevens. Jo kinne it dwaan 3 Ferskillende metoades beskreaun hjirûnder, mear foar't, lit my jim wat oer de “MySQL Utilities”.

MySQL Utilities | mysqlfrm

As jo ​​net fan doel om de foarstelde metoade 1 (online) dan moatte jo gebrûk meitsje fan de ark “mysqlfrm” levere troch “MySQL Utilities“.

Dizze tool sil útpakke de gegevens struktuer en generearje de SQL skript foar tafel oanmeitsjen. foar dit, download “MySQL Utilities” (wat like mysql-1.6.4-winx64.msi-nutsbedriuwen) en ynstallearje-o.

Iepenje de konsole (Befel / FAN) en brûk CD kommando om it standert ynstallaasje triemtafel (wat like C:\Program Files MySQL MySQL Utilities 1.6\). Tink derom dat binnen dy map is it programma mysqlfrm.exe.

  cd "C:\Program Files  MySQL  MySQL Utilities 1.6"

Kies mar ien fan 'e metoaden hjirûnder te ekstrahearje de struktuer fan in tafel opnommen yn .frm:

1Metoade No. | online

1. Besykje de webside https://recovery.twindb.com/;
2. Clique gjin menu “recover Lêswizer” en dêrnei yn “út .frm triem“;
3. Klik op 'e knop “browser…” en selektearje jo .frm triem; e
4. Klik op 'e knop “upload” en tafel creation script ferskynt op it skerm.

Jo kinne stjoere meardere .frm yn ien kear it meitsjen fan in inkele skript mei alle tafels. Krekt te litten jo meitsje in .zip mei al syn .frm foar't “Browser / Upload”.

2Metoade No. | brûkende –Diagnostic

/* foarbyld generic */
   mysqlfrm -diagnostic "<boarne / path>/mytable.frm" > "<bestimming / path / recovered_mytable.sql>"
 
/* Foarbyld praktyk mei WordPress tafel wp_posts.frm */
   mysqlfrm --Diagnostic "C:\wamp\bin\mysql\mysql5.6.17\data\meubanco\wp_posts.frm" > "C:\recovered_wp_posts.sql"

3Metoade No. | brûkende –tsjinner

/* foarbyld generic */
  mysqlfrm -server=woartel:mypassword@localhost -port=3311 "<boarne / path>/mytable.frm" > "<bestimming / path>/recovered_mytable.sql"
 
/* Foarbyld praktyk mei WordPress tafel wp_posts.frm */
  mysqlfrm --tsjinner=woartel@localhost --haven=3307 ""C:\wamp\bin\MySQL\mysqld.6.17\data\meubanco\wp_posts.FRM" > "C:\recovered_wp_posts.SQL"

Net brûke de MySQL haven! Kies in oare beskikber. Tink derom dat it kommando trochferwizings de útfier nei in .sql triem dat wurdt bewarre yn de opjûne paad (gjin gefal, C:).

stap 2: Re-create de tafel yn jo database

Yn in nije databank, meitsje in tafel mei it skript generated in Step 1. Ik persoanlik ynstallearre in skjinne ferzje fan WampServer en brûkt PHPMyAdmin (http://localhost / phpmyadmin /) te meitsjen fan de databank en ymportearje de SQL skript makke yn stap 1 (recovered_wp_posts.sql). Dit skript sil meitsje 2 triemmen yn de triemtafel fan jo MySQL databank:

  SUA_TABELA.FRM
  SUA_TABELA.IDB

Yn myn gefal, dizze triemen waarden makke yn C:\wamp64 bin MySQL mysql5.7.14 data <MYDATABASE.GDB>. yn oare wurden, sjoch foar jo MySQL ynstallaasje en der rekken mei dat de triemtafel data Der komt in databank en de twa neamd triemmen.

stap 3: Smyt it nije .idb triem

Fuortsmiten fan de nije .idb triem, rinne de folgjende SQL- kommando:

/* foarbyld generic */
  Alter TABLE myntabel dumpen TABLESPACE;
 
/* Foarbyld praktyk mei WordPress tafel wp_posts */
  Alter TABLE wp_posts dumpen TABLESPACE;

Este Comando fuortsmite o link entre in tabela e o tablespace (Dêr't sy materieel opslein de databank triemmen), en wiskje de triem .idb.

stap 4: Kopiearje de âlde .idb triem

De orizjinele triem .idb (hokker befettet gegevens) Jo moatte wurde kopiearre nei it plak fan .idb dat waard wiske yn Step 3. Brûk Ctrl + C en Ctrl + V of sels slachtsje it kommando rigel.

stap 5: ReActivate de tafel

De brutsen keppeling yn Step 3 Jo moatte opknapt wurde mei de folgjende kommando:

/* foarbyld generic */
  Alter TABLE myntabel IMPORT TABLESPACE;
 
/* Foarbyld praktyk mei WordPress tafel wp_posts */
  Alter TABLE wp_posts IMPORT TABLESPACE;

Sit gjin soargen oft je krije guon warskôgingen, lykwols, kin wêze te jaan algemiene ôfbraak mei dêrop de folgjende fout:

  #1808 - skema komt net oerien (Tabel hat ROW_TYPE_DYNAMIC rige yndieling, .IBD triem hat ROW_TYPE_COMPACT rij formaat.)

yn dit gefal, dit barde troch oan 'e oare wize dy't mysql5.7.14 (NEW) skept de standert tafel yn relaasje ta de MySQL-6.5.17 (OLD), sem o ROW_FORMAT = kompakt.

doe, as jo MySQL> = it mysql5.7.14, alles wat jo nedich hawwe om te dwaan is foegjen ROW_FORMAT = kompakt yn tabel creation definysje.

  CREATE TABLE `wp_posts` (. . .) MOTOR=InnoDB ROW_FORMAT=kompakt

oare fouten

Krekt foar it record, foardat as opfolger fan in .frm data extraction, Ik hie in pear flaters:

  # Boarne on localhost: ... ferbûn.
  # It starten fan de spawned tsjinner op poarte 3304 ... Flater by poging ta stopjen mislearre spawned tsjinner.  Process ID = 6648.
  FERSIN: Spawn tsjinner operaasje mislearre. Clone server flater: Net by steat om te kommunisearjen mei nij instance. process ID = 6648.. om diagnose, rinne de nuttichheid wer en brûke de --verbosity opsje te besjen de berjochten út de spawned tsjinner en korrizjearje eventuele flaters presintearre dan rinne de nuttichheid wer.
  SUKSES: It proses mei PID 6648 (bern proses fan PID 7264) is beëinige.
Traceback (meast resinte oprop lêste):
  Map "G:\ade  bouwe  sb_0-19921351-1470074463.97  Python-2.7.6-finsters-x86-64bit  lib  site-arranzjeminten  cx_Freeze  initscripts  Console.py", rigel 27, yn <module>
  Map "scripts\mysqlfrm.py", rigel 422, yn <module>
  Map ".\mysql\utilities\command\read_frm.py", rigel 439, yn read_frm_files
  Map ".\mysql\utilities\command\read_frm.py", rigel 166, yn _spawn_server
  Map ".\mysql\utilities\command\serverclone.py", rigel 180, yn clone_server
  Map ".\mysql\utilities\common\tools.py", rigel 273, yn get_mysqld_version
IOError: [errno 13] Tastimming wegere: 'Version_check'

Yn it spesifike gefal fan WordPress, jo moatte fuortsmite it skript dat generearre de SQL krige yn .frm, alle yngongen as 'standert ‘0000-00-00 00:00:00', oars, sil fange de fout:

  #1067 - standertwearde (standert) ûnjildige foar 'comment_date'

dat!

boarnen

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

Totaal oantal hits: 21433

12 resinsjes “Recover MySQL Tables doe't allinne de .frm en .ibd triemen binne beskikber

  1. Rodrigo sei:

    Wat te dwaan as jo sjogge it folgjende fout berjocht: #1815 – Ynterne flater. Kin net weromsette LSNs yn tabel “MYDATABASE.GDB”.”minhatabela”: Data struktuer korrupsje.
    Is it mooglik om de gegevens sels Inserts? Hoe moat it?
    Ik tankje dy.

  2. Cristian U sei:

    Hi Taylor,

    Hoe ha jo oplosse dizze flater:
    FERSIN: Spawn tsjinner operaasje mislearre. Clone server flater: Net by steat om te kommunisearjen mei nije eksimplaar. Process ID = 6648.. om diagnose, rinne de nut wer en brûk de –verbosity opsje te besjen de berjochten út de spawned tsjinner en korrizjearje eventuele flaters presintearre dan rinne de nuttichheid wer.
    SUKSES: It proses mei PID 6648 (bern proses fan PID 7264) is beëinige.

    Ik hâld krige deselde berjocht en ik Sis wit hoe te lossen it.

    Tank

  3. Reginaldo Luiz de Freitas sei:

    parabéns Taylor, mar didaktysk ûnmooglik!! do bist de selde guy!

    hug en tank foar it dielen fan jo ûnderfining!

Leave a Reply

Jo e-mailadres wurdt net publisearre wurde. Ferplichte fjilden binne markearre mei *