Restaurarea MySQL bază de date la distanță

Sub mâna prins virtualke cu Centos 5.6 X86_64 si MySQL 5.0.77
bază de date de test a fost creat cu un cuplu de tabele ca MyISAM și InnoDB. Și un cuplu de proceduri stocate pentru a testa recuperarea lor:


Ei bine, există puține date pentru a crea:


scenariu de testare ales un principiu foarte simplu să ia în considerare este posibilitatea de recuperare.

Blană sa strecurat neobservat

După ce vom crea și verificați dacă baza de date răspunde și conține anumite informații:

Emularea [cu mop femeie cu ziua] îndepărtarea de bază cu o comandă simplă:


Conform sfaturile din acest articol, nu reporniți serverul, și nu se opresc mysql să rămână descriptori de fișiere deschise (în caz contrar informații vor fi pierdute, și de a recupera ar putea avea nevoie de intervenție directă în sistem de fișiere).

Imediat posibil pentru a verifica dacă este descris la link-ul de mai sus nu funcționează Cel puțin pentru că priza a fost șters:


Dacă încercați să prikonnektitsya prin tcp, atunci suntem încă vor fi dezamăgiți, deoarece MySQL nu știe nimic despre bazele de date și mysqldump va da o concluzie gol:


Uneori, de asemenea, mysqldump poate jura că nu poate fi scris în tabelul mysql.time_zone_name:

mysqldump: Nu s-a putut executa '/ * 40103 SET TIME_ZONE =!' + 00:00 '* /': Tabelul 'mysql.time_zone_name' nu există (1146)

dar acesta este un parametru esențial --skip-tz-utc

Așa că am îngropa un pic în modul în care MySQL stochează bazele de date. baze de date MySQL în ceea ce privește un director în care este stocată tabele definiție, indexuri și date (pentru cazul doar cu tabelul de definiție InnoDB stocate în directorul, iar datele sunt stocate într-un fișier separat). Pentru a vedea baza noastra de date MySQL - este suficient pentru a vedea în interiorul directorul / var / lib / mysql /
avem pentru a restaura toate fișierele care au fost acolo - pentru a obține tabelele și datele din baza de date.
Procedurile și funcțiile care nu sunt stocate în baza de date principală, și se află în proc tabel MySQL - astfel încât această bază, de asemenea, va trebui să fie restaurate.
O sarcină ușurată de faptul că procesul mysqld se execută, și păstrează descriptori de fișiere deschise la fișierele șterse, iar sistemul nu șterge fișierul până când mânerul este închis. sistemul de fișiere / Proc oferă acces la aceste fișiere prin intermediul link-urile din / proc / [BIP] / fd / *


Noi le folosim pentru a găsi și de a restabili numele bazelor de date, filtra numai directoarele din / var / lib / mysql / și de a le crea în același loc:


baza de date MySQL vede acum:


Dar mysqldump va exporta în continuare vidul. Vom încerca să-l repara, restaura fișierele rămase, care sunt încă în proces deschis. Pentru a face acest lucru, face un link de la / var / lib / mysql / la în fișiere / proc:


După această operațiune mysqldump returnează încă nule, iar dacă vă întrebați tabel zaeksportit specifice - care se va jura că acest tabel nu există:


Problema constă în faptul că fișierele de definiție de masă nu sunt întotdeauna deschise la procesul și accesul la ele este rară, respectiv, în etapele anterioare pentru a „restaura“ fișierele eșuat. Decizia privind prezența unui anumit tabel pentru exporturile realizate pe baza unor tabele care descriu fișier, astfel încât automată de export nu a reușit.

Cu toate acestea, lipsa de fișier definiție nu împiedică recepția directă a datelor din tabelul:


Cu toate acestea, din moment ce masa poate avea pete și structură complicată, o astfel de metodă de obținere a datelor nu este confortabil. De asemenea, pentru că tabelele InnoDB sunt stocate în baza de date numai cu fișierul de definiție care nu este recuperat în acest proces - astfel încât eșantionul lor este posibilă numai dacă știți de memorie toate numele de masă.
Ultima metodă poate ajuta la „salva“ o anumită cantitate mică de informații critice în cazul lui Avraam a făcut.

Capacitatea de a recupera descrierea bazelor de date in articol sa dovedit a fi nefuncțional (prins!).
Nu aveți încredere în toate metodele magice de recuperare pe care flash în vasta rețea. Asigurați-vă copii de siguranță, a crea un plan de redresare, și verificați întotdeauna posibile scenarii de recuperare înainte ca acestea să se întâmple ireparabile.