web-dev-qa-db-fra.com

MySQL dump par requête

Est-il possible de faire mysqldump par un seul SQL query?

Je veux vider la base de données entière, comme phpmyadmin lorsque vous exportez vers SQL

205
Jakub Arnold

pas mysqldump, mais mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

vous pouvez le rediriger vers un fichier si vous voulez:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Mise à jour: Le message original demandait s'il pouvait dump de la base de données par requête. Ce qu'il demandait et ce qu'il voulait dire étaient différents. Il voulait vraiment que toutes les tables soient mysqldump.

mysqldump --tables myTable --where="id < 1000"
265
Zak

Cela devrait marcher

mysqldump --databases X --tables Y --where="1 limit 1000000"
247
Thomas Ahle

Vous pouvez vider une requête en csv comme ceci:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
67
Guy

Vider une table en utilisant une requête where:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Vider une table entière:

mysqldump mydatabase mytable > data.sql

Remarques:

  • Remplacez mydatabase, mytable et l'instruction where avec les valeurs souhaitées.
  • Par défaut, mysqldump inclura les instructions DROP TABLE et CREATE TABLE dans sa sortie. Par conséquent, si vous souhaitez ne pas supprimer toutes les données de votre table lors de la restauration à partir du fichier de données enregistré, veillez à utiliser l'option --no-create-info.
  • Vous devrez peut-être ajouter les options -h, -u et -p appropriées aux commandes exemples ci-dessus afin de spécifier votre hôte de base de données, utilisateur et mot de passe, respectivement.
58
Gary

Vous pouvez utiliser l'option --where sur mysqldump pour produire une sortie que vous attendez:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

Au plus 100 lignes de test.t1 seront vidées de la table de base de données.

À la vôtre, WB

38
Wagner Bianchi

Si vous souhaitez exporter votre n dernier nombre d'enregistrements dans un fichier, vous pouvez exécuter les opérations suivantes:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

La procédure ci-dessus sauvegarde les 100 derniers enregistrements dans export_file.sql, en supposant que la table à partir de laquelle vous exportez comporte une colonne id auto-incrémentée.

Vous devrez modifier les valeurs utilisateur, localhost, base de données et table. Vous pouvez éventuellement modifier la colonne id et le nom du fichier d'exportation.

5
AUllah1

En combinant une bonne partie de ce qui précède, voici mon véritable exemple pratique: choisir des enregistrements basés à la fois sur mètre et timestamp. J'ai besoin de cette commande depuis des années. Exécute très rapidement.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql
3
zzapper

MySQL Workbench intègre également cette fonctionnalité dans l’interface graphique. Exécutez simplement une requête, cliquez sur l'icône de sauvegarde en regard de Exporter/Importer:

enter image description here

Choisissez ensuite "Instructions SQL INSERT (* .sql)" dans la liste.

enter image description here

Entrez un nom, cliquez sur Enregistrer, confirmez le nom de la table et vous aurez votre fichier de vidage.

3
MPelletier