Ripristino del database MySQL da file fisici


140

È possibile ripristinare un database MySQL dai file del database fisico. Ho una directory che ha i seguenti tipi di file:

client.frm
client.MYD
client.MYI

ma per circa 20 altri tavoli.

Di solito uso mysqldump o uno strumento simile per ottenere tutto in 1 file SQL, quindi qual è il modo di gestire questi tipi di file?


Ho lo stesso problema: più file con estensioni FRM, MYD e MYI. Ho anche i file ib_logfile0, ib_logfile1 e ibdata1. Non riesco ad accedere a un server in esecuzione o creare un dump. Ho provato ad eseguire un nuovo server MySQL e ad utilizzare i file, ma non ho avuto successo ... Qualcuno ha un chiaro come fare?
flo5783

Risposte:


132

Una tabella MyISAM MySQL è la combinazione di tre file:

  • Il file FRM è la definizione della tabella.
  • Il file MYD è dove sono archiviati i dati effettivi.
  • Il file MYI è il punto in cui sono memorizzati gli indici creati nella tabella.

Dovresti essere in grado di ripristinare copiandoli nella cartella del database (in Linux, il percorso predefinito è /var/lib/mysql/)

Dovresti farlo mentre il server non è in esecuzione.


64
questo vale solo per le tabelle MyISAM. InnoDB memorizza le sue tabelle e gli indici in un unico tablespace *, che per impostazione predefinita è costituito dai 3 file ibdata1, ib_logfile0 e ib_logfile1. per ripristinare un database, sono necessari anche quei file. * I tablespace per tabella sono possibili, ma non predefiniti
ax.

21
Dice di avere file .frm .myi e .myd. Ho quindi pensato che fossero tabelle MyISAM.
Vincent,

5
Risposta preziosa, ma ho dovuto fare un ulteriore passo in avanti affinché le cose funzionassero bene: dal momento che dovevo accedere come root per ripristinare i file, l' mysqlutente che eseguiva il mysqldprocesso non poteva accedervi. Fare una chmod -R mysql:mysql .directory di dati mysql è semplice e veloce, ma prima di tutto ho capito perché tutti i miei DB resoterd sembravano non avere tabelle impiegate un po 'più di tempo.
Edurne Pascual,

10
herenvardo Penso che intendevi chown non chmod
Oliver M Grech,

2
Per ricapitolare alcune note importanti, potresti dover chowncopiare i file in questo modo:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr

50

Dalla risposta di @Vicent, ho già ripristinato il database MySQL come di seguito:

Passaggio 1. Arrestare il server Mysql

Passaggio 2. Copiare il database nella cartella del database (in Linux, il percorso predefinito è / var / lib / mysql). Mantenere lo stesso nome del database e lo stesso nome del database in modalità mysql.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Passaggio 3: modificare la propria e cambiare modalità nella cartella:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Passaggio 4: copiare ibdata1 nella cartella del database

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Passaggio 5: copiare i file ib_logfile0 e ib_logfile1 nella cartella del database.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Ricorda cambia proprietario e cambia root di quei file:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

o

sudo chown -R mysql:mysql /var/lib/mysql

Passaggio 6 (Opzionale): il mio sito ha una configurazione per archiviare i file in una posizione specifica, quindi li copio esattamente nella posizione corrispondente.

Passaggio 7: avviare il server Mysql. Tutto torna e divertiti.

Questo è tutto.

Maggiori informazioni su: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/


4
+1 per istruzioni dettagliate dettagliate. Ma ho modificato alcune dichiarazioni per riflettere veramente ciò che dovrebbero essere.
Peter,

Si è verificato un errore n. 1932, impossibile accedere ai dati. Vengono visualizzati i database, ma i dati non sono accessibili. Esecuzione di XAMPP 7.2.12 su MAC OS X Mojave.
Steve1754a,

@ Steve1754a l'errore può essere dovuto a diversi motivi 1. Spostare un database da Mac OS a Mac OS? 2. Controlla l'autorizzazione di tali file / dati / tabella
biolinh

Risposte: 1. Sì; 2. L'ho fatto. Ho dovuto intraprendere una ricostruzione completa del mio DB. Impossibile trovare una soluzione. Morale alla storia: crea sempre un backup del DB. Vorrei che ci fosse un modo semplice per farlo automaticamente in XAMPP.
Steve1754a

1
mi hai salvato la vita
SpongePablo il

8

Se stai ripristinando la cartella, non dimenticare di chown i file su mysql: mysql

chown -R mysql:mysql /var/lib/mysql-data

altrimenti otterrai errori quando si tenta di eliminare un database o aggiungere una nuova colonna ecc.

e riavvia MySQL

service mysql restart

2
questa non è davvero una risposta alla domanda ma è stata molto utile.
Ryantuck,

in realtà non dovresti chown tutto a mysql, la cartella del database mysql dovrebbe conservare il gruppo root
Galvani

8

Ho lo stesso problema ma non sono riuscito a ripristinare correttamente il database, in base alle istruzioni sopra.

Sono stato in grado di recuperare solo le cartelle del database mysql dal mio sistema operativo Ubuntu. Il mio problema è come recuperare il mio database con quelle cartelle di dati mysql illeggibili. Quindi sono tornato al sistema operativo win7 per l'ambiente di sviluppo.

* NOTA Ho un server di database esistente in esecuzione su Win7 e ho solo bisogno di pochi file di database per recuperare dai file recuperati. Per ripristinare con successo i file di database dal sistema operativo Ubuntu ho bisogno di installare di recente il server database mysql (stessa versione dal sistema operativo Ubuntu nel mio sistema operativo win7) per ripristinare tutto in quel vecchio server di database.

  1. Crea un altro nuovo server database mysql con la stessa versione dai file recuperati.

  2. Arresta il server mysql

  3. copia la cartella recuperata e incollala nel database mysql (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data).

  4. copia il file ibdata1 che si trova nella cartella installata di mysql linux e incollalo in (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Basta sovrascrivere l'esistente o eseguire il backup prima di sostituirlo.

  5. avviare il server mysql e verificare se i file del database sono stati ripristinati correttamente.

  6. Per utilizzare il database ripristinato nel mio server mysql attualmente utilizzato, è sufficiente esportare il database recuperato e importarlo nel mio server mysql esistente.

Spero che questi possano aiutare, perché nient'altro ha funzionato per me.


1
Il metodo funziona anche su Ubuntu / Debian con i file ibdata1, ib_logfile0 e ib_logfile1 e la cartella del database. l'utente non verrà copiato, ma è possibile aggiungere un nuovo utente al database e scaricarlo con quello.
bokorben,

2

Con MySql 5.1 (Win7). Per ricreare i DB (InnoDbs) ho sostituito tutti i contenuti delle seguenti directory (parametri my.ini):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Successivamente ho avviato il servizio MySql e tutto funziona perfettamente.


1

Sì! Basta aggiungerli alla cartella del database (a seconda del sistema operativo) ed eseguire un comando come "Autorizzazioni correzione MySQL". Ciò ha nuovamente memorizzato il database. Vedi anche che le autorizzazioni corrette sono impostate anche sui file.


L'ho fatto, ma non riconosce le tabelle. Come ho detto nel mio commento sulla risposta precedente.
orezvani,

0

Una volta ho copiato questi file nella cartella di archiviazione del database per un database mysql che funzionava, ho avviato il db e ho aspettato che "riparasse" i file, quindi li ho estratti con mysqldump.


-1

Nel mio caso, semplicemente rimuovere il tc.log in / var / lib / mysql è stato sufficiente per riavviare mariadb / mysql.


questo non è un problema di poter avviare / riavviare il server mysql.
Oluwatumbi,
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.