Erreur lors de l'importation du vidage SQL dans MySQL: base de données inconnue / impossible de créer la base de données

84

Je ne sais pas comment importer un fichier de vidage SQL. Je n'arrive pas à importer la base de données sans créer d'abord la base de données dans MySQL.

Il s'agit de l'erreur affichée lorsqu'elle database_namen'a pas encore été créée:

username= nom d'utilisateur d'une personne ayant accès à la base de données sur le serveur d'origine.
database_name= nom de la base de données du serveur d'origine

$ mysql -u username -p -h localhost database_name < dumpfile.sql   
Enter password:  
ERROR 1049 (42000): Unknown database 'database_name' 

Si je me connecte à MySQL en tant que root et crée la base de données, database_name

mysql -u root  
create database database_name;  
create user username;# same username as the user from the database I got the dump from.  
grant all privileges on database_name.* to username@"localhost" identified by 'password';  
exit mysql

puis essayez à nouveau d'importer le vidage SQL:

$ mysql -u username -p database_name < dumpfile.sql  
Enter password:  
ERROR 1007 (HY000) at line 21: Can't create database 'database_name'; database exists

Comment dois-je importer le fichier de vidage SQL?

BryanWheelock
la source

Réponses:

39

Ouvrez le fichier sql et commentez la ligne qui tente de créer la base de données existante.

Bjorn
la source
8
@BryanWheelock Je pense qu'une meilleure option (industrialisable) serait de ne pas sélectionner la base de données dans votre commande, donc cela devient: "mysql -u username -p -h localhost <dumpfile.sql". Le nom_base_de_données est un paramètre facultatif. Si votre fichier de vidage contient une instruction "créer une base de données", il sera créé.
toni07
Juste pour élaborer un peu là-dessus, la toute première ligne de mon fichier * .sql contenait ceci: CREATE DATABASE IF NOT EXISTS `database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; Changer ceci en (note / * au début): / * CREATE DATABASE IF NOT EXISTS `database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; commente efficacement la commande et IMPORT devrait fonctionner. N'oubliez pas d'être actif dans la base de données dans laquelle vous voulez que l'IMPORT insère les tables, sinon vous risquez d'être en désordre!
ntk4
49

Il s'agit d'un bogue connu sur MySQL.

bogue 42996
bogue 40477

Comme vous pouvez le voir, c'est un problème connu depuis 2008 et ils ne l'ont pas encore résolu !!!

TRAVAIL AUTOUR
Vous devez d'abord créer la base de données à importer. Il n'a besoin d'aucune table. Ensuite, vous pouvez importer votre base de données.

  1. commencez par démarrer votre ligne de commande MySQL (appliquez le nom d'utilisateur et le mot de passe si vous en avez besoin)
    C:\>mysql -u user -p

  2. Créez votre base de données et quittez

    mysql> DROP DATABASE database;  
    mysql> CREATE DATABASE database;  
    mysql> Exit  
    
  3. Importez votre base de données sélectionnée à partir du fichier de vidage
    C:\>mysql -u user -p -h localhost -D database -o < dumpfile.sql

Vous pouvez remplacer localhost par une adresse IP ou un domaine pour tout serveur MySQL vers lequel vous souhaitez importer. La raison de la commande DROP dans l'invite mysql est d'être sûr que nous commençons avec une base de données vide et propre.

Max Kielland
la source
2
J'apprécie la réponse. Nous sommes maintenant en 2012 et il semble que le bogue soit toujours là, car j'ai utilisé votre réponse pour restaurer ma databae wordpress sur un nouveau serveur (notez cependant que vos recommandations MySQL n'ont pas la fin ';'. ;-)
Karl
12

Il semble que votre vidage de base de données inclut les informations nécessaires à la création de la base de données. Donc, ne donnez pas à la ligne de commande MySQL un nom de base de données. Il créera la nouvelle base de données et y basculera pour effectuer l'importation.

Paul Tomblin
la source
4

Si vous créez votre base de données en direct admin ou cpanel, vous devez éditer votre sql avec notepad ou notepad ++ et changer la CREATE DATABASEcommande en CREATE DATABASE IF NOT EXISTSin line22

MaysaM
la source
0

Je crée moi-même la base de données en utilisant la ligne de commande. Ensuite, essayez à nouveau d'importer, cela fonctionne.

wmlhust
la source