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
Alex
la source
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".

Joschi
la source
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

Banjer
la source
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
icc97
la source
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é!

Qasim
la source
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.

ikso
la source
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.

TimSparrow
la source
0

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

par exemple:

gunzip -c file.sql.gz | mysql -u root -p database
Ali Jazayeri
la source