Come ripristinare uno dei miei database MySQL da .myd, .myi, .frmi file?
Come ripristinare uno dei miei database MySQL da .myd, .myi, .frmi 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 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]
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 = 4livello (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 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.
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 .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.
C:\XAMPP) e alla sottodirectory mysql\data. Il percorso completo dovrebbe essereC:\XAMPP\mysql\dataAll'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
È 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.