Comment charger un fichier sql.gz dans ma base de données? (importation)


151

J'essaie d'importer directement un fichier SQL compressé dans mysql. Est-ce la bonne façon?

mysql -uroot -ppassword mydb > myfile.sql.gz

14
Même en ignorant le côté gzip de la question, votre flèche indique le mauvais sens ...
Matt Fletcher

Réponses:


238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>écrira le résultat de la mysqlcommande stdoutdans le fichier myfile.sql.gzqui n’est probablement pas ce que vous voulez. De plus, cette commande vous demandera le mot de passe de l'utilisateur MySQL "root".


15
En tant que bonne pratique de sécurité, je mettrais mon mot de passe sur la ligne de commande, je laisserais mysql le demander.
Prof. Moriarty

9
Ou même mieux: créer ~/.my.cnfavec les informations d'identification. ;)
joschi

5
Comme @Prof. Moriarty explique, vous pouvez modifier la commande pour ne pas utiliser le mot de passe via zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Il saura que le dernier paramètre est la base de données que vous souhaitez utiliser, pas votre mot de passe.
Bafromca

6
Pour corriger légèrement le commentaire de @Moriarty, une bonne pratique de sécurité consisterait à ne pas mettre mon mot de passe sur la ligne de commande (où il sera stocké dans l'historique ou visible par-dessus votre épaule) et à laisser MySQL le demander. Si l'option -p est utilisée seule, MySQL demandera le mot de passe à l'invite.
George

4
+1 pour quelque chose qui laisse le fichu dump de base de données compressé
Dmitri DB

82

Pour afficher une barre de progression lors de l'importation d'un fichier sql.gz, téléchargez pvet utilisez les éléments suivants:

pv mydump.sql.gz | gunzip | mysql -u root -p

Dans CentOS / RHEL, vous pouvez installer pv avec yum install pv.

Dans Debian / Ubuntu apt-get install pv.

En MAC, brew install pv


2
pvsemble être dans le repo Ubuntu aussi (du moins dans 12.04 LTS, c’est le cas), mais encore une fois, vous devez le faire sudo apt-get install pvpour l’obtenir. Merci Banjer, c'est parfait pour les grosses importations de bases de données!
toon81

Je devais exécuter pv mydump.sql.gz | gunzip | mysql -u root my_database_base. C'était parce que j'importais des tables et que je n'ai pas de mot de passe pour mon utilisateur root
Cristiano Mendonça

Dans MAC,brew install pv
score

54

Le moyen le plus simple consiste à décompresser le fichier de base de données avant de l'importer. Aussi comme mentionné par @Prof. Moriarty vous ne devriez pas spécifier le mot de passe dans la commande (il vous sera demandé le mot de passe). Cette commande extraite de webcheatsheet va décompresser et importer la base de données en une fois:

gunzip < myfile.sql.gz | mysql -u root -p mydb

1
De plus, mydb doit être créé avant l'importation. Cela ne crée pas la base de données pour vous.
Siddhartha

J'ai trouvé ma tuyauterie gunzipsur un fichier compressé de 10 Go a bloqué mon importation. Je ne sais pas si cela est dû à des contraintes de mémoire ou à quelque chose du genre, mais je préférerais faire une étape à la fois dans le futur.
Ryan Tuck

@RyanTuck Cela repousse les limites de ce genre de processus :)
icc97

@Siddhartha Cela dépend du fichier de vidage SQL. Parfois, ils incluent des instructions create database.
Rooby

@rooby c'est logique.
Siddhartha


5

Sur macOS, j'ai utilisé ceci:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

Entrez votre mot de passe, et le tour est joué!


4

Vérifiez également s'il existe une instruction USE dans le fichier SQL. La spécification de la base de données sur la ligne de commande ne garantit pas la fin des données si une destination différente est spécifiée dans le fichier SQL.


2
Vous avez juste besoin d'étendre la commande comme ceci: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. La réponse acceptée utilise cette approche.
Bafromca

1

Pour les fichiers compressés bzip2 (.sql.bz2), utilisez:

bzcat <file> | mysql -u <user> -p <database>

OU

pv <file> | bunzip2 | mysql -u <user> -p <database>

pour voir la barre de progression.


0

Vous pouvez utiliser l' -c, --stdout, --to-stdoutoption de gunzipcommande

par exemple:

gunzip -c file.sql.gz | mysql -u root -p database
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.