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
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"
Cela devrait marcher
mysqldump --databases X --tables Y --where="1 limit 1000000"
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'
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:
mydatabase
, mytable
et l'instruction where avec les valeurs souhaitées.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
.-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.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
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.
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
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:
Choisissez ensuite "Instructions SQL INSERT (* .sql)" dans la liste.
Entrez un nom, cliquez sur Enregistrer, confirmez le nom de la table et vous aurez votre fichier de vidage.