Mysql - cum de a restabili baza de date de la

baza de date MySQL, format din tabele InnoDB - un lucru bun. Dar ea poate deveni o sursă de probleme grave, în cazul în care într-o zi „cad“ server, și va fi la îndemână copii de rezervă proaspete. În cazul tabelelor MyISAM - trebuie doar să copiați fișierele din baza de date pierdute într-o nouă bază de date goală. Cu o astfel de focalizare InnoDB, din păcate, nu trece. Dar recuperarea, cu toate acestea, este aproape întotdeauna posibil. Să începem.

Cel puțin ai nevoie să recuperați - fișiere și .ibd * .frm navernuvsheysya dintr-o bază de date MySQL. 2 fișiere ar trebui să fie pe fiecare masă. Dacă nu le-ați găsit în vechea baza de date - toate foarte trist. Cel mai probabil, acest lucru înseamnă că datele din toate tabelele stocate în același fișier, dar asta e altă poveste. În acest caz, rămâne să simpatizeze și să consilieze în viitor, nu uitați să setați un parametru foarte util în setările MySQL:

[Mysql]
innodb_file_per_table = 1

Ei bine, dacă * * .frm .ibd și găsit - deși de recuperare va fi proces oarecum plictisitor, dar este probabil să fie finalizat cu succes. In primul experiment ma ajutat foarte mult aici (1), și că (2) Articolul, cu toate acestea, a trebuit să merg pe drumuri separate.

Pentru a începe, alege un nou server de MySQL, de preferință, aceeași versiune, care a fost în baza de date afectate. Cunoaște versiunea, puteți, de exemplu, din baza de date fișier jurnal. versiunea sistemului de operare, în general, nu este important. Dar sub Unix există mai mult decât orice loțiuni. În orice caz, vă recomandăm insistent să nu utilizeze un server MySQL de lucru, ca urmare a unor acțiuni shamanici ulterioare poate fi acoperite, și problemele pe care tocmai ați crește numai. Sub Windows, felul în care totul a mers bine și Serviciul de Denver, și toate comenzile pot fi rulate de la phpMyAdmin ei. Dar când restabiliți InnoDB Percona Server, nu rămâne nimic altceva cum să construiască server care rulează sub Unix.

Să mergem. Nu uita innodb_file_per_table = 1 în opțiuni, de a crea o bază de date cu același nume ca victimă. Creați un tabel în ea, cu numele tău restaurat la ea:
CREATE TABLE `sometable` (` id` INT PRIMARY KEY) MOTOR CU = InnoDB;

Acum ne oprim MySQL, substitui în .frm fișierul vechiul nostru de la masa, si .ibd copia in sine „pentru experimente.“ Run MySQL, si executa SHOW TABLE `sometable`;

Ura! Acum avem structura de masă decedat! Și, în primul dintre legăturile pe care acesta a susținut că, fără ea, nimic pentru a recupera. Acum puteți (fără a uita o astfel de copiere se oprește MySQL) încearcă să substituie fișierul nostru .ibd cu date. Încercăm să efectuați selectați și. cu un accident de server se blochează. Pentru a înțelege ce se întâmplă, uita-te la jurnalul său: „sometable tabel Id-ul astfel, dar ar trebui să fie cutare și cutare!“. Aceasta este tristetea principala. Stochează baza de date la fiecare id de masă și de control pe care îl (este stocat în fișiere .ibd).

Acum ai 2 moduri de a face prieteni cu masa de vechi id, și id-ul în noua bază de date. Una dintre opțiuni - pentru a înlocui id-ul în baza de date în sine. Ei bine, dacă vreți - asta e bine. Pomos această utilitate poate că se execută Unix cânte de aici. Am compilat cu succes, dar atunci când încercați să ./ibdconnect o- / usr / local / mysql / ibdata1 -f / usr / local / mysql / someDB / sometable.ibd -d someDB -t sometable din păcate, accentul nu este trecut. Ea a subliniat în mod corect ID-ul, dar a scris o eroare atunci când încercați să-l schimbe. Ei bine, acesta poate fi chiar înainte de crearea unui nou tabel pentru a contracara vânt noua bază de date, astfel încât să coincidă cu tabelul generat. Pentru a face acest lucru, pur și simplu a crea un script, eliminați din tabel, cum se face - este în prima referință. Dacă aveți o mulțime de tabele - mai bine pentru a găsi mai întâi tabelul cu ID-ul minim. Pentru a reseta contorul de serverul MySQL - aveți nevoie pentru a recrea baza de date, și poate avea pentru a elimina 3 ib * fișier.

skip-innodb_checksums = 1
innodb_force_recovery = 5

În cazul în care masa este deschis - urgent salva. ) Dar, în cazul în care masa a fost mare - totul va cădea din greșeală anterioară. Afaceri că această identitate într-un fișier poate fi repetat de mai multe ori, la începutul fiecărei pagini interne. Așa că va trebui să meargă cu atenție căuta prin fișierul, schimbând id-ul în cazul în care ID-ul și într-adevăr nu se atinge în cazul în care această combinație de octeți este altceva. Deci, „Replace toate“, probabil, nu o plimbare.

Mai mult aceeași greșeală: care codifică. În tabelul rezultat al literelor românești ar putea fi recodate de două ori, devenind mizerie imposibil de citit. Există doar să acorde o atenție la codarea server intern în setările sale, precum și faptul că este scris în cererea fiind recuperată de masă. De exemplu, am avut un caz în care masa în sine a avut codare CP1251, iar interiorul câmpului separat - latin1. Recuperat o mizerie de neînțeles. Am avut un tabel de toate pentru a repeta primul care solicita crearea sa poubirav doar coloane Latin1. Totul sa dovedit.

Aici, probabil, și toate. Mult noroc, și nu uitați să facă copii de siguranță în timp util.

În cazul în care auto-reparare a bazei de date nu există nici un fel - poate ajuta

Controlul copiile textului: TextMarket serviciu