web-dev-qa-db-fra.com

Restauration de la base de données MySQL à partir de fichiers physiques

Est-il possible de restaurer une base de données MySQL à partir des fichiers de base de données physiques? J'ai un répertoire qui a les types de fichiers suivants:

client.frm
client.MYD
client.MYI 

mais pour environ 20 tables supplémentaires.

J'utilise habituellement mysqldump ou un outil similaire pour obtenir tout dans un fichier SQL. Quel est le moyen de traiter ces types de fichiers?

115
Abdullah Jibaly

Une table MySQL MyISAM est la combinaison de trois fichiers:

  • Le fichier FRM est la définition de la table.
  • Le fichier MYD est l'endroit où les données réelles sont stockées.
  • Le fichier MYI est l'emplacement où sont stockés les index créés sur la table.

Vous devriez pouvoir les restaurer en les copiant dans votre dossier de base de données (sous Linux, l'emplacement par défaut est /var/lib/mysql/).

Vous devriez le faire pendant que le serveur n'est pas en cours d'exécution.

116
Vincent

D'après la réponse de @Vicent, j'ai déjà restauré la base de données MySQL comme suit:

Étape 1. Arrêtez le serveur Mysql

Étape 2. Copiez la base de données dans votre dossier de base de données (sous Linux, l'emplacement par défaut est/var/lib/mysql). Conservez le même nom de la base de données et le même nom de la base de données en mode mysql.

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

Etape 3: Modifiez vous-même et changez le mode du dossier:

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

Étape 4: Copiez ibdata1 dans votre dossier de base de données

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

Sudo chown mysql:mysql /var/lib/mysql/ibdata1

Étape 5: Copiez les fichiers ib_logfile0 et ib_logfile1 dans votre dossier de base de données.

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/

N'oubliez pas de changer et de changer la racine de ces fichiers:

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

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

ou

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

Étape 6 (Facultatif): Mon site est configuré pour stocker les fichiers dans un emplacement spécifique, puis je les copie exactement à l'emplacement correspondant.

Étape 7: démarrez votre serveur Mysql. Tout revient et en profite.

C'est ça.

Plus d’informations sur: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/

27
biolinh

J'ai le même problème mais la base de données n'a pas été récupérée avec succès selon les instructions ci-dessus. 

Je n'ai récupéré que les dossiers de base de données mysql de mon système d'exploitation Ubuntu. Mon problème est de savoir comment récupérer ma base de données avec ces dossiers de données mysql illisibles. Maintenant, je reviens à l'OS Win7 pour l'environnement de développement.

* NOTE Un serveur de base de données existant s'exécute dans win7 et il ne me manque que quelques fichiers de base de données pour extraire des fichiers récupérés. Pour récupérer avec succès les fichiers de base de données à partir du système d'exploitation Ubuntu, j'ai besoin d'un nouveau serveur de base de données mysql installé et de la même version à partir du système d'exploitation Ubuntu dans mon système d'exploitation Win7 pour tout récupérer sur cet ancien serveur de base de données.

  1. Créez un autre nouveau serveur de base de données MySQL avec la même version à partir des fichiers récupérés

  2. Arrêtez le serveur mysql

  3. copiez le dossier récupéré et collez-le dans la base de données mysql (C:\ProgramData\MySQL\MySQL Server 5.5\data).

  4. copiez le fichier ibdata1 situé dans le dossier installé de mysql sous linux et collez-le dans le fichier (C:\ProgramData\MySQL\MySQL Server 5.5\data). Juste au-dessus de , Corrigez l'existant ou effectuez une sauvegarde avant de le remplacer.

  5. démarrez le serveur mysql et vérifiez si vous avez correctement récupéré les fichiers de la base de données.

  6. Pour utiliser la base de données récupérée sur mon serveur mysql actuellement utilisé, exportez-la simplement et importez-la avec mon serveur mysql .__ existant.

J'espère que cela vous aidera car je n'ai pas trouvé de solution à mon problème. 

8
Ivan Igniter

Si vous restaurez le dossier, n'oubliez pas de chowner les fichiers sur mysql: mysql 

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

sinon, vous obtiendrez des erreurs en essayant de supprimer une base de données ou d'ajouter une nouvelle colonne, etc.

et redémarrez MySQL

service mysql restart
7
Joel Davey

Avec MySql 5.1 (Win7). Pour créer des bases de données (InnoDb), j'ai remplacé le contenu des répertoires suivants (paramètres my.ini):

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

Après cela, j'ai démarré MySql Service et tout fonctionne bien.

2

Oui, ça l'est! Ajoutez-les simplement à votre dossier de base de données (selon le système d'exploitation) et exécutez une commande telle que "Autorisations de correctif MySQL". Cela re-stocké la base de données. Voir aussi que les autorisations correctes sont également définies sur les fichiers.

1
Filip Ekberg

Dans mon cas, supprimer simplement tc.log dans/var/lib/mysql était suffisant pour redémarrer mariadb/mysql.

0
SirJohnFranklin

Une fois, j'ai copié ces fichiers dans le dossier de stockage de la base de données mysql qui fonctionnait, démarré la base de données et attendu qu'elle "répare" les fichiers, puis les ai extraits avec mysqldump.

0
Spikolynn