2010-02-26 4 views
52

Est-il possible d'importer une base de données unique à partir d'un mysqldump --all-bases de données? Je suppose que je peux modifier le fichier manuellement mais je me demande s'il existe des options de ligne de commande pour le faire.base de données unique à partir de bases de données --all-dump

Je me déplace des serveurs et ai beaucoup de bases de données, dont la plupart je fais actuellement pas besoin ou si vous voulez au moment, mais je voudrais avoir la possibilité de restaurer un seul en cas de besoin.

Répondre

70

mysqldump sortie est juste un ensemble de SQL déclarations.

Vous pouvez fournir la base de données souhaitée dans la ligne de commande et sauter les commandes contre les autres bases de données en utilisant:

mysql -D mydatabase -o < dump.sql 

Ce n'exécute les commandes lorsque mydatabase est en cours d'utilisation

+0

Merci pour la réponse rapide! Impressionnant. – savageguy

+2

Très utile pour moi, merci !! vous pouvez ajouter des clés --disable-pour les erreurs de ÉVITEZ clés étrangères;) mysql -u utilisateur -D base de données --disable-clés -o davidselo

+15

C'est la réponse est très téméraire et incroyablement dangereux. Si vous lancez 'mysqldump --all-databases', la sortie de mysqldump contiendra' DROP DATABASE IF EXISTS dbname; CREATE DATABASE nombase; USE dbname; 'pour chaque base de données de l'instance MySQL, y compris le schéma mysql. S'il vous plaît consulter la documentation mysqldump: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_all-databases. Cela signifie que chaque base de données sera écrasée sans pitié. Pouvez-vous fournir la preuve qu'il va sauter toute la base de données, mais un ??? Remarque: vous pouvez faire cela aux journaux binaires en utilisant mysqlbinlog. – RolandoMySQLDBA

48

Vous pouvez utiliser le commande suivante:

mysql -u root -p --one-database destdbname < alldatabases.sql 

destdbname est votre base de données désirée que vous souhaitez restaurer.

Une autre option qui est à mon humble avis beaucoup plus sûr, est d'extraire le DB d'une décharge --all-databases. Exemple:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql 

Remplacer dbname avec le nom de la base de données souhaitée. alldatabases.sql est le nom de votre fichier sql-dump. De cette façon, vous aurez la base de données séparée sur le fichier, puis vous pouvez restaurer en utilisant une simple commande mysql.

Bonne chance

(Crédits va à: Darren Mothersele - voir his page)

+2

Excellente solution! Cela dit, j'ai dû ajouter l'en-tête de vidage d'origine pour éviter certaines erreurs ... – neuro

Questions connexes