2008-09-22 27 views
9

Devo ripristinare un database che è stato inavvertitamente DROPped in MySQL 5.0. Dal controllo dei file di backup, mi sembra di avere solo file .FRM per contenere i dati del database.Ripristino del database InnoDB MySQL

Qualcuno può consigliare se questo è tutto ciò di cui ho bisogno per eseguire un ripristino/importazione del database dal backup, o ci sono altri file che dovrei avere a portata di mano per completare questo?

risposta

14

. I file .frm non sono i file di dati, archiviano solo le "informazioni del dizionario dati" (vedere MySQL manual). InnoDB memorizza i suoi dati nei file ib_logfile *. Questo è quello che ti serve per fare un backup/ripristino. Per maggiori dettagli vedi here.

+0

InnoDB richiede i file ibdata, ib_logfile * e/o * .ibd oltre ai file * .frm. – silfreed

+0

cosa succede se si dispone solo del file ib_logfile * e di .frm (insieme a un backup di mesi)? qualche possibilità di recuperare in quello scenario? o hai bisogno degli ibdata per recuperare qualcosa? – eglasius

6

Oh mio ... sei nei guai. Spegni il database. Eseguire il backup del file innodb. Prega di non aver fatto NIENTE dopo aver lasciato cadere il database.

I ragazzi di Percona (inclusi gli autori di MySQL Performance Blog) dovrebbero essere in grado di aiutarti: Percona emergency support.

Se ti avventuri da solo, portalo con te: Data Recovery Toolkit for Innodb.

La logistica di esso? Devi leggere ogni pagina (la pagina dei termini del computer ... blocco 16k nel caso di Innodb) e ricostruire i tuoi dati in questo modo. È un lavoro di livello molto basso (stiamo parlando di aprire il tuo editor esadecimale e iniziare a contare i byte se il toolkit non lo fa per te), e se non sei un programmatore con molta esperienza, farai del male .

7

Ripristino InnoDB: (supponendo che la cartella dei dati è C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)

  1. Copiare le cartelle dei database (dal nome del nome del database) che si desidera ripristinare a C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data
  2. Copia i 3 file ibdata nella cartella dati es. (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. Ottenere la dimensione del _ib_logfile0 in MB (dovrebbe essere lo stesso di _ib_logfile1) da File Fare clic destro -> Proprietà

  4. Modificare il file di configurazione di mysql (mysql \ bin \ my.ini) per l'innodb_log_file_size = 343m di essere esattamente la dimensione dei file ibdata

  5. Run

    mysqld --defaults-file = mysql \ bin \ my.ini -standalone --console --innodb_force_recovery = 6

  6. Ora i dati devono essere di nuovo nel database.Esportarli utilizzando phpmysql o qualsiasi altro strumento

+0

non funziona per me - in phpMyAdmin posso vedere le tabelle InnoDb, ma non posso accedervi –

+0

Step 3/4 non so se hanno fatto qualcosa. Dovevo rimuovere i file in ordine perché riavviasse effettivamente mysql. Non sei sicuro del passaggio 5 ... Ma il passaggio 1,2,5 e il riavvio di mysql sembravano funzionare! – msponagle

+0

Proprio come dice @msponagle. Non sono riuscito a completare tutti i passaggi, ma i passaggi 1, 2, forse 3 defenetly quindi riavviare il servizio e se non inizierà provare a riavviare il computer. Questo ha funzionato per me. – ingkevin

-2

La soluzione dettagliata potete trovare qui:

http://www.unilogica.com/mysql-innodb-recovery/ (articolo in portoghese)

Oltre alla bandiera del innodb_force_recovery, ho trovato un'altra soluzione: innodb_file_per_table, che divide le tabelle InnoDB in ogni file come le tabelle MyISAM.

In un ripristino di emergenza è possibile perdere meno dati rispetto al singolo file ibdata1.