Come recuperare il database MySQL da file .myd, .myi, .frm


183

Come ripristinare uno dei miei database MySQL da .myd, .myi, .frmi file?


10
Anche se ho risposto a questo, appartiene davvero a Serverfault.
derobert,

31
@chandrajeet dovresti davvero accettare la risposta più votata.
Torre,

2
Ehi chandrajeet, perché non accetti la risposta di Derobert? Confermo che funziona anche per me. Non fa per te? stackoverflow.com/help/someone-answers
Taz

Risposte:


173

Se si tratta di tabelle MyISAM, quindi scaricare i file .FRM, .MYD e .MYI in una directory del database (ad es. /var/lib/mysql/dbname ) renderà disponibile tale tabella. Non deve essere lo stesso database da cui provengono, lo stesso server, la stessa versione di MySQL o la stessa architettura. Potrebbe inoltre essere necessario modificare la proprietà della cartella (ad es. chown -R mysql:mysql /var/lib/mysql/dbname)

Si noti che le autorizzazioni ( GRANT, ecc.) Fanno parte del mysqldatabase. Quindi non verranno ripristinati insieme alle tabelle; potrebbe essere necessario eseguire le GRANTistruzioni appropriate per creare utenti, consentire l'accesso, ecc. (Il ripristino del mysqldatabase è possibile, ma è necessario prestare attenzione alle versioni di MySQL e alle eventuali esecuzioni mysql_upgradedell'utilità.)

In realtà, probabilmente hai solo bisogno di .FRM (struttura della tabella) e .MYD (dati della tabella), ma dovrai riparare la tabella per ricostruire .MYI (indici).

L'unico vincolo è che se si esegue il downgrade, è meglio controllare le note di rilascio (e probabilmente eseguire la tabella di riparazione). Le versioni più recenti di MySQL aggiungono funzionalità, ovviamente.

[Anche se dovrebbe essere ovvio, se mescoli e abbini le tabelle, l'integrità delle relazioni tra quelle tabelle è il tuo problema; A MySQL non importa, ma la tua applicazione e i tuoi utenti potrebbero esserlo. Inoltre, questo metodo non funziona affatto per le tabelle InnoDB. Solo MyISAM, ma considerando i file che hai, hai MyISAM]


Funzionerebbe davvero senza aggiungere le voci appropriate alla tabella information_schema? Voglio dire MySQL ha bisogno di sapere per cercare questi file giusto?
Zenshai,

4
Le tabelle information_schema in realtà non esistono, sono solo viste nello stato del database interno. Vedi dev.mysql.com/doc/refman/5.0/en/information-schema.html
brian-brasile

4
Wow, mi sono sentito sporco, ma lasciando l'intera directory da quella che penso fosse un'installazione di MySQL4 nel mio MySQL5.1, ho semplicemente ricreato magicamente le tabelle. Nessun riavvio o altro (su Windows).
Dave,

4
Funziona, devi solo ricordare di eseguire (per ogni tabella): check table sometable; e quindi eseguire la riparazione (solo se necessario): repair table sometable;
Nux

3
Questo ha funzionato alla grande! Avevo messo a posto i file, ma mysql non li "vedeva" fino a quando non ho cambiato la proprietà in "mysql: mysql".
sean.boyer,

26

Se si desidera ricostruire il file MYI, l'uso corretto di REPAIR TABLE è:

TABELLA DI RIPARAZIONE talvolta USE_FRM;

Altrimenti probabilmente otterrai un altro errore.


24

Ho appena scoperto la soluzione per questo. Sto usando MySQL 5.1 o 5.6 su Windows 7.

  1. Copia il file .frm e ibdata1 dal vecchio file che si trovava su "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data"
  2. Arresta l'istanza del server SQL nell'istanza SQL corrente
  3. Vai alla cartella dei dati situata in "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data"
  4. Incollare ibdata1 e la cartella del database che contiene il file .frm dal file che si desidera ripristinare.
  5. Avviare l'istanza di MySQL.

Non è necessario individuare i file .MYI e .MYD per questo ripristino.


Segui questi passaggi (dopo che tutto il resto era fallito) e utilizzava il innodb_force_recovery = 4livello (non sono sicuro che fosse necessario in questo caso). Grazie a Dio!
Joshua Stewardson,

6
Cordiali saluti: ibdata1è InnoDB, non MyISAM.
derobert,

14

Una cosa da notare:

Il file .FRM contiene la struttura della tabella ed è specifico della versione di MySQL.

Il file .MYD NON è specifico della versione, almeno non delle versioni minori.

Il file .MYI è specifico, ma può essere lasciato fuori e rigenerato REPAIR TABLEcome dicono le altre risposte.

Il punto di questa risposta è farti sapere che se hai un dump dello schema delle tue tabelle, puoi usarlo per generare la struttura della tabella, quindi sostituire quei file .MYD con i tuoi backup, eliminare i file MYI e ripararli tutti. In questo modo è possibile ripristinare i backup su un'altra versione di MySQL o spostare del tutto il database senza utilizzarlo mysqldump. Ho trovato questo super utile quando si spostano database di grandi dimensioni.


14

Semplice! Creare un database fittizio (ad esempio abc)

Copia tutti questi file .myd, .myi, .frm in mysql \ data \ abc dove mysql \ data \ è il luogo in cui sono memorizzati .myd, .myi, .frm per tutti i database.

Quindi vai su phpMyadmin, vai su db abc e trovi il tuo database.


la risposta più breve e precisa
Serak Shiferaw,

Il modo migliore per recuperare i dati ... Ho installato WAMP, quindi ho creato un nuovo database, copiato i file nella nuova directory del database C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase apri phpmyadmin e il tuo nuovo database, lo farai vedere i dati
Alexandre georges

7

Penso che .mi puoi riparare dall'interno di mysql.

Se vedi questo tipo di messaggi di errore da MySQL: il database non è riuscito a eseguire la query (query) 1016: impossibile aprire il file: "sometable.MYI". (errno: 145) Messaggio di errore: 1034: file chiave errato per la tabella: "sometable". Prova a ripararlo, quindi probabilmente hai una tabella danneggiata o danneggiata.

Puoi controllare e riparare la tabella da un prompt di mysql come questo:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

e ora il tuo tavolo dovrebbe andare bene:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+

6

Ho trovato una soluzione per convertire i file in un .sqlfile (è quindi possibile importare il .sqlfile su un server e ripristinare il database), senza la necessità di accedere alla /vardirectory, quindi non è necessario essere un amministratore del server per farlo.

Richiede XAMPP o MAMP installato sul tuo computer.

  • Dopo aver installato XAMPP, accedere alla directory di installazione (di solito C:\XAMPP) e alla sottodirectory mysql\data. Il percorso completo dovrebbe essereC:\XAMPP\mysql\data
  • All'interno vedrai le cartelle di tutti gli altri database che hai creato. Copiare e incollare gli cartella piena di .myd, .myie .frmfile in là. Il percorso per quella cartella dovrebbe essere

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Quindi visita localhost/phpmyadminin un browser. Seleziona il database che hai appena incollato nella mysql\datacartella e fai clic su Esporta nella barra di navigazione. Seleziona l'esportazione come .sqlfile. Apparirà quindi chiedendo dove salvare il file

E questo è tutto! Si (dovrebbe) hanno ora un .sqlfile contenente il database che era in origine .myd, .myie .frmfile. Puoi quindi importarlo su un altro server tramite phpMyAdmin creando un nuovo database e premendo 'Importa' nella barra di navigazione, quindi seguendo i passaggi per importarlo


5

È possibile copiare i file in una directory della sottodirectory con nome appropriato della cartella dei dati, purché si tratti della stessa versione EXACT di mySQL e siano stati conservati tutti i file associati in quella directory. Se non hai tutti i file, sono abbastanza sicuro che avrai dei problemi.


Se non ho la stessa versione EXACT di MySQL, cosa devo fare?
Jo Sprague,


2

La descrizione sopra non è stata sufficiente per far funzionare le cose per me (probabilmente denso o pigro), quindi ho creato questo script una volta trovata la risposta per aiutarmi in futuro. Spero che aiuti gli altri

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;

-2

Per quelli con Windows XP e MySQL Server 5.5 installato - la posizione per il database è C: \ Documents and Settings \ All Users \ Dati applicazioni \ MySQL \ MySQL Server 5.5 \ data, a meno che non sia stata modificata la posizione all'interno dell'installazione di MySql Workbench GUI.


3
La domanda riguarda il ripristino da tipi di file specifici, non dove questi file possono essere trovati su MySQL 5.5 di Windows XP.
Danpe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.