Recuperare MySQL tabelele atunci numai .frm fişiere şi ibd sunt disponibile

Cum de a rezolva “MySQL Error #1146 -Masă nu există” cauzate de mutarea fişierelor .IDB (InnoDB) direct între directoare (tablespace).

logo_mysql

Problema

Multe dintre problemele pe care le au sunt probleme am creat. Am avut doar înfiinţat un Site folosind WordPress şi a crezut că: Cât despre Văzând modul în care aceasta funcţionează în PHP 7? ok, ca meu WampServer utilizate PHP 5.6, aşa că a trebuit să “fericit” ideea de a face upgrade WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, PHP 5.5.12) pentru WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP şi Php 7.0.10).

desigur, inceput de rezervă, dar mea mare alunecare a fost ales nu se exportă SQL astfel de Site, În schimb, tocmai a făcut o copie de la dosar MySQL (MySQL/date) şi aplicarea (www/site-ul). Eram siguri că ar lucra, ca alte ori.

După instalarea WampServer noi cu PHP 7, pune fişierele copie de rezervă şi din spate de aplicare, doar când m-am dus pentru a testa browser-ul, nu au apărut pe site-ul, dar ecranul de instalare WordPress ca în cazul în care ar fi fost un nou Site. Îngheţat! Deschideţi PHPMyAdmin şi verificaţi pentru a vedea dacă baza de date a fost Ok şi am văzut că, În ciuda fiind enumerate în baza de date, Când aţi făcut clic pe partea de sus masă pentru a vizualiza datele următorul mesaj de eroare:

  MySQL Eroare #1146 -Tabel <TABLE_NAME> nu-i ' t exista

Am fost căutarea şi tocmai am aflat că puteţi copia sau muta fişierele direct la un alt director de MySQL MySQL în cazul în care fişierele sunt MyISAM tip, cele cu extensia de fişier frm. MYD. MYI. Nu ştiu ce sa întâmplat, dar baza de date meu a apărut ca InnoDB (.FRM si idb). Din păcate, numai după faptul că MySQL alertat documentaţia:

  Nu puteţi muta în mod liber .IBD fişiere între date directoare ca puteţi cu MyISAM masă fişiere. 
  Definiţie de masă stocate în tablespace InnoDB comun include numele bazei de date. 
  Transaction ID-uri şi jurnal numerele de secvenţă stocate în fişiere tablespace, de asemenea, diferă de la baze de date.

Soluţie

Cheguei o ver algumas soluções simples, Mas vou descrever aqui o única que realmente funcionou para mim, apesar de parecer bem mais complexa, encontrada nici un Post “Restaurarea tabel(sandu) în baza de date MySQL, atunci când fişierele frm sau ibd sunt disponibile numai“.

Ante-urile, porém, o título de conhecimento, vale lembrar que em relação ao tipo InnoDB, MySQL structura dvs de Garda în fişierele şi date în ibd .frm.. Teoria suficient, Haideţi să taie la subiect!

Pas 1: Re-a crea structura de fişiere .frm

Aşa cum a spus, frm conţine structură de tabel. În primul rând avem nevoie pentru a prelua această structură pentru a popula apoi datele. Puteţi face acest lucru 3 diferite metode descrise mai jos, dar înainte, Lasă-mă să vă spun ceva despre “Utilitare de MySQL”.

Utilitare de MySQL | mysqlfrm

Dacă nu intenţionaţi să utilizeze prima metodă propusă (Online) Deci, trebuie să utilizaţi instrumentul “mysqlfrm” furnizate de “Utilitare de MySQL“.

Acest instrument va extrage structura de date şi pentru a genera crearea tabelului SQL script-ul. Pentru acest lucru, Descarca “Utilitare de MySQL” (ceva de genul mysql-utilitati-1.6.4-winx64.msi) şi a instala it.

Deschide consola (Comanda / De) utilizaţi comanda CD pentru a muta directorul de instalare implicită (ceva de genul C:\C:Programul FilesMySQLMySQL utilitate 1.6\). Reţineţi că în acest director este executabil mysqlfrm.exe.

  CD-UL "C:\C:Programul FilesMySQLMySQL utilitati 1.6"

Alegeţi doar una din metodele de mai jos pentru a extrage dumneavoastră structură de tabel conţinute în fişierele .frm:

1º Metoda | Online

1. Du-te la site-ul HTTPS://Recovery.twindb.com/;
2. Faceţi clic pe meniul “Recupera structura” şi apoi în “FRM fişierul din.“;
3. Faceţi clic pe butonul “Browser-ul…” şi selectaţi fişierul frm; şi
4. Faceţi clic pe butonul “Încărcaţi” şi masă crearea script-ul va fi afişat pe ecran.

Este posibil să trimiteţi mai multe fişiere frm o dată generează un singur script cu toate tabelele. Doar pentru a vă crea un .zip cu toate .frm sale înainte de “Browser-ul/Upload”.

2º Metoda | Folosind –diagnosticare

/* Exemplu generice */
   mysqlfrm-diagnostic "<Sursa/cale>/mytable.FRM" > "<Destination/Path/recovered_mytable.SQL>"
 
/* Exemplu în practică cu tabelul wp_posts.frm de WordPress */
   mysqlfrm --diagnosticare "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.FRM" > "C:\raduecovered_wp_posts.SQL"

3º Metoda | Folosind –Server

/* Exemplu generice */
  mysqlfrm-server=rădăcină:parola mea@localhost-port=3311 "<Sursa/cale>/mytable.FRM" > "<destinaţie/cale>/recovered_mytable.SQL"
 
/* Exemplu în practică cu tabelul wp_posts.frm de WordPress */
  mysqlfrm --Server=rădăcină@localhost --port=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.FRM" > "(C):\recovered_wp_posts.SQL"

Nu utilizaţi portul de MySQL! Alege oricare alte disponibile. Reţineţi că comanda redirecţionări ieşire la un fişier .SQL memorat în calea specificată (în cazul, (C):).

Pas 2: Recreaţi tabelul din baza de date

Într-o bază de date nouă, Creaţi un tabel cu script-ul generat în pas 1. Personal am instalat o versiune curată a WampServer si folosit PHPMyAdmin (http://localhost/phpmyadmin /) pentru a crea baza de date şi SQL script-ul creat la pasul de import 1 (recovered_wp_posts.SQL). Acest script va crea 2 fişierele în directorul bazei de date MySQL:

  SUA_TABELA.FRM SUA_TABELA.IDB

În cazul meu, Aceste fișiere au fost create în (C):\wamp64binmysqlmysql5.7.14data<locul meu>. IE, Uita-te pentru instalarea MySQL şi reţineţi că, în directorul data Va fi baza de date şi cele două fişiere menţionate.

Pas 3: Eliminaţi fişierul .IDB nou

Pentru a elimina fişierul .IDB nou, executaţi următoarea comandă SQL:

/* Exemplu generice */
  ALTER TABLE mytable se îndepărtează TABLESPACE;
 
/* Exemplu în practică cu wp_posts masă de WordPress */
  Wp_posts tabel ALTER TABLESPACE ARUNCAŢI;

Această comandă elimină legătura dintre masă şi tablespace (În cazul în care sunt stocate fizic fişierele bazei de date), şi eliminaţi fişierul .IDB.

Pas 4: Copiaţi fişierul .IDB vechi

Fişierul original .IDB (care conţine datele) trebuie să fie copiat la locul pe care am şters în etapa .IDB 3. Utilizaţi Ctrl + C si Ctrl + V sau te sinucizi utilizând linia de comandă.

Pas 5: Reactivaţi tabelul

Link rupt în pas 3 trebuie să fie restaurat cu următoarea comandă:

/* Exemplu generice */
  ALTER TABLE mytable IMPORT TABLESPACE;
 
/* Exemplu în practică cu wp_posts masă de WordPress */
  Wp_posts tabel ALTER IMPORT TABLESPACE;

Nu vă faceţi griji în cazul în care primiţi unele avertismente, porém, Ar putea fi generale defecţiune care apare următoarea eroare:

  #1808 - Nepotrivire de schemă (Tabelul are format de rând ROW_TYPE_DYNAMIC, .IBD fişierul are formatul de rând ROW_TYPE_COMPACT.)

În acest caz, Acest lucru sa întâmplat din cauza diferit decât mysql 5.7.14 (NOI) creează un tabel de implicit în comparaţie cu Mysql-5.6.17 (VECHI), fără ROW_FORMAT = compact.

Deci, Dacă tu eşti folosire MySQL > = mysql 5.7.14, tot ce trebuie să faceţi este să adăugaţi ROW_FORMAT = compact în definiţia de creare tabel.

  CREATE TABLE 'wp_posts' (. . .) MOTOR=InnoDB ROW_FORMAT=Compact

Alte erori

Doar pentru a înregistra, inainte de a obtine succesul la extragerea datelor din. frm, Am avut unele erori:

  # Sursa pe localhost: ... conectat.
  # Incepand spawned server pe portul 3304 ... EROARE încercarea de a opri nu a reuşit spawned server.  Id de proces = 6648.
  EROARE: Icre server Operațiunea nu a reușit. Eroare de server clona: Imposibilitatea de a comunica cu noi instanta. Id de proces = 6648.. Pentru a diagnostica, executaţi utilitarul din nou şi utilizarea The --verbosity opţiune la spre a vedea mesajele de pe spawned server şi de a corecta orice erori prezentat apoi executaţi utilitarul din nou.
  SUCCESUL: Procesul cu PID 6648 (procesul de copil de PID 7264) a fost reziliat.
Traceback (cel mai recent apel ultima):
  Fişier "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", linie 27, în <Modulul>
  Fişier "scripts\mysqlfrm.py", linie 422, în <Modulul>
  Fişier ".\mysql\utilities\command\raduead_frm.py", linie 439, în read_frm_files
  Fişier ".\mysql\utilities\command\raduead_frm.py", linie 166, în _spawn_server
  Fişier ".\mysql\utilities\command\serverclone.py", linie 180, în clone_server
  Fişier ".\mysql\utilities\common\tools.py", linie 273, în get_mysqld_version IOError: [Eroare 13] Permisiune refuzată: 'version_check'

În cazul specific al WordPress, trebuie să eliminaţi script-ul care a generat SQL generate sub. frm, toate intrările lipsă ‘0000-00-00 00:00:00’, în caz contrar, va prinde eroarea:

  #1067 - Valoare implicită (în mod implicit) nu este corect pentru 'comment_date'

Asta e tot!

Fonturi

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

Total afisari: 21400

12 Comentarii “Recuperare MySQL tabelele atunci numai .frm fişiere şi ibd sunt disponibile

  1. Rodrigo a spus:

    Ce să fac atunci când veţi vedea următorul mesaj de eroare: #1815 – Eroare internă. Imposibil de reiniţializat LSNs în tabelul “locul meu”.”myTable”: Corupţiei de structura datelor.
    Pot executa insertii de date manual? Cum se face acest lucru?
    Deoarece deja vă mulţumesc.

  2. Cristian U a spus:

    Salut Taylor,

    Cum rezolva această eroare:
    EROARE: Icre server Operațiunea nu a reușit. Eroare de server clona: Imposibilitatea de a comunica cu nouă instanţă. Id de proces = 6648.. Pentru a diagnostica, executaţi utilitarul din nou şi de a folosi –verbosity opţiune la spre a vedea mesajele de pe spawned server şi de a corecta orice erori prezentat apoi executaţi utilitarul din nou.
    SUCCESUL: Procesul cu PID 6648 (procesul de copil de PID 7264) a fost reziliat.

    Am să păstreze primesc acelaşi mesaj şi am don´t ştiu cum să o rezolve.

    mulţumesc

  3. Georgeana Luiz de Freitas a spus:

    Felicitări Taylor, dar didactice imposibil!! Sunteţi acelaşi tip!

    îmbrăţişare şi mulţumiri pentru sharing al tău experience!

lasă un răspuns

Adresa ta de email nu va fi publicat. Câmpurile obligatorii sunt marcate cu *