Je voudrais éviter mysqldump car cela sort sous une forme qui n'est pratique que pour mysql à lire. CSV semble plus universel (un fichier par table est très bien). Mais s'il y a des avantages à mysqldump, je suis toute oreille. Aussi, j'aimerais quelque chose que je puisse exécuter à partir de la ligne de commande (linux). Si c'est un script mysql, des pointeurs sur la façon de faire une telle chose seraient utiles.
mysql
command-line
csv
backup
dreeves
la source
la source
Réponses:
Si vous pouvez gérer une table à la fois et que vos données ne sont pas binaires, utilisez l'
-B
option de lamysql
commande. Avec cette option, il générera des fichiers TSV (séparés par des tabulations) qui peuvent être importés dans Excel, etc., assez facilement:Alternativement, si vous avez un accès direct au système de fichiers du serveur, utilisez
SELECT INTO OUTFILE
ce qui peut générer de vrais fichiers CSV:la source
\. file.sql
lit). En tant que tel, en fonction de votre installation, vous le trouverez probablement à/var/lib/mysql/[db_name]/table.csv
Dans MySQL lui-même, vous pouvez spécifier une sortie CSV comme:
Depuis http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
la source
Vous pouvez vider une base de données entière en une seule fois avec l'
mysqldump's --tab
option. Vous fournissez un chemin de répertoire et il crée un.sql
fichier avec laCREATE TABLE DROP IF EXISTS
syntaxe et un.txt
fichier avec le contenu, séparés par des tabulations. Pour créer des fichiers séparés par des virgules, vous pouvez utiliser les éléments suivants:Ce chemin doit être accessible en écriture à la fois par l'utilisateur mysql et par l'utilisateur exécutant la commande, donc pour plus de simplicité, je recommande d'
chmod 777 /tmp/path_to_dump/
abord.la source
mysqldump: You must use option --tab with --fields-...
GRANT FILE ON *.* TO 'user1'@'localhost';
- stackoverflow.com/a/15014385/1707015 . Dans mon cas, j'ai dû prendre/var/lib/mysql-files/
(au lieu de/tmp/
), définir l'utilisateur sur mysql: mysql et définir les droits sur 777 - stackoverflow.com/a/32737616/1707015 .L'option de sélection dans le fichier ne fonctionnait pas pour moi, mais la méthode détournée ci-dessous pour acheminer un fichier délimité par des tabulations via SED a fonctionné:
la source
t
remplacement de la lettre par", "
dans le fichier de sortie. Pas exactement ce que je cherchais.Voici la commande la plus simple pour cela
S'il y a une virgule dans la valeur de la colonne, nous pouvons générer .tsv au lieu de .csv avec la commande suivante
la source
mysql -hlocalhost -uroot -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > /tmp/output.csv
`Si vous avez vraiment besoin d'une "sauvegarde", vous avez également besoin d'un schéma de base de données, comme des définitions de table, des définitions de vue, des procédures de stockage, etc. Une sauvegarde d'une base de données ne se limite pas aux données.
La valeur du format mysqldump pour la sauvegarde est spécifiquement qu'il est très FACILE de l'utiliser pour restaurer les bases de données mysql. Une sauvegarde qui n'est pas facilement restaurée est beaucoup moins utile. Si vous recherchez une méthode pour sauvegarder de manière fiable les données mysql afin de pouvoir les restaurer sur un serveur mysql, je pense que vous devriez vous en tenir à l'outil mysqldump.
Mysql est gratuit et fonctionne sur de nombreuses plates-formes différentes. La configuration d'un nouveau serveur mysql sur lequel je peux restaurer est simple. Je ne suis pas du tout inquiet de ne pas pouvoir configurer mysql pour pouvoir effectuer une restauration.
Je serais beaucoup plus inquiet d'une sauvegarde / restauration personnalisée basée sur un format fragile comme l'échec de csv / tsv. Êtes-vous sûr que tous vos guillemets, virgules ou onglets qui se trouvent dans vos données seraient correctement échappés, puis analysés correctement par votre outil de restauration?
Si vous recherchez une méthode pour extraire les données, voyez-en plusieurs dans les autres réponses.
la source
Vous pouvez utiliser le script ci-dessous pour obtenir la sortie vers des fichiers csv. Un fichier par table avec en-têtes.
user est votre nom d'utilisateur, password est le mot de passe si vous ne voulez pas continuer à taper le mot de passe pour chaque table et mydb est le nom de la base de données.
Explication du script: La première expression de sed, remplacera les tabulations par "," donc vous avez des champs entre guillemets et séparés par des virgules. Le deuxième insère un guillemet double au début et le troisième insère un guillemet double à la fin. Et le dernier s'occupe du \ n.
la source
--skip-column-names
dans ma version de mysql, aussiDécouvrez mk-parallel-dump qui fait partie de la suite d'outils toujours utile de maatkit . Cela peut vider les fichiers séparés par des virgules avec l'option --csv.
Cela peut faire toute votre base de données sans spécifier de tables individuelles, et vous pouvez spécifier des groupes de tables dans une table de jeu de sauvegarde.
Notez qu'il vide également les définitions de table, les vues et les déclencheurs dans des fichiers séparés. En plus de fournir une sauvegarde complète sous une forme plus universellement accessible, il est également immédiatement restaurable avec mk-parallel-restore
la source
maatkit
semble faire partie dupercona toolkit
maintenant, mais je ne trouve pas les outils correspondants.Réponse PowerShell à deux lignes:
Boum-bata-boom
-D
= le nom de votre base de données-e
= requête-B
= délimité par des tabulationsla source
Si vous voulez vider toute la base de données en tant que csv
la source