Come ripristinare uno dei miei database MySQL da .myd
, .myi
, .frm
i file?
Come ripristinare uno dei miei database MySQL da .myd
, .myi
, .frm
i file?
Risposte:
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 mysql
database. Quindi non verranno ripristinati insieme alle tabelle; potrebbe essere necessario eseguire le GRANT
istruzioni appropriate per creare utenti, consentire l'accesso, ecc. (Il ripristino del mysql
database è possibile, ma è necessario prestare attenzione alle versioni di MySQL e alle eventuali esecuzioni mysql_upgrade
dell'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]
check table sometable;
e quindi eseguire la riparazione (solo se necessario): repair table sometable;
Ho appena scoperto la soluzione per questo. Sto usando MySQL 5.1 o 5.6 su Windows 7.
Non è necessario individuare i file .MYI e .MYD per questo ripristino.
innodb_force_recovery = 4
livello (non sono sicuro che fosse necessario in questo caso). Grazie a Dio!
ibdata1
è InnoDB, non MyISAM.
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 TABLE
come 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.
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.
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 |
+------------------+-------+----------+----------+
Ho trovato una soluzione per convertire i file in un .sql
file (è quindi possibile importare il .sql
file su un server e ripristinare il database), senza la necessità di accedere alla /var
directory, quindi non è necessario essere un amministratore del server per farlo.
Richiede XAMPP o MAMP installato sul tuo computer.
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
, .myi
e .frm
file in là. Il percorso per quella cartella dovrebbe essere
C:\XAMPP\mysql\data\foldername\.mydfiles
Quindi visita localhost/phpmyadmin
in un browser. Seleziona il database che hai appena incollato nella mysql\data
cartella e fai clic su Esporta nella barra di navigazione. Seleziona l'esportazione come .sql
file. Apparirà quindi chiedendo dove salvare il file
E questo è tutto! Si (dovrebbe) hanno ora un .sql
file contenente il database che era in origine .myd
, .myi
e .frm
file. 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
È 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.
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Dice di rinominare i file ib_ *. L'ho fatto e mi ha restituito il db.
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;
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.