Existe-t-il un moyen de restreindre certaines tables à partir de la commande mysqldump?
Par exemple, j'utiliserais la syntaxe suivante pour vider uniquement table1 et table2:
mysqldump -u username -p database table1 table2 > database.sql
Mais existe-t-il un moyen similaire de vider toutes les tables sauf table1 et table2? Je n'ai rien trouvé dans la documentation mysqldump, donc la force brute (en spécifiant tous les noms de table) est-elle la seule solution?
En s'appuyant sur la réponse de @ Brian-Fisher et en répondant aux commentaires de certaines personnes sur ce post, j'ai un tas d'énormes tables (et inutiles) dans ma base de données, donc je voulais ignorer leur contenu lors de la copie, mais garder la structure :
Les deux fichiers résultants sont structurellement solides, mais les données sous-évaluées sont désormais d'environ 500 Mo au lieu de 9 Go, ce qui est bien mieux pour moi. Je peux maintenant importer ces deux fichiers dans une autre base de données à des fins de test sans avoir à me soucier de manipuler 9 Go de données ou de manquer d'espace disque.
la source
pour plusieurs bases de données:
la source
mysqld
etmysqldump
serait les mêmes programmes.Un autre exemple pour ignorer plusieurs tables
utiliser
--ignore-table
et créer un tableau de tables, avec des syntaxes commedatabase.table
Liens avec des informations qui vous aideront
compresser la sortie mysqldump
Importer une base de données
Script simple pour ignorer les tables
la source
Pour exclure certaines données de table , mais pas la structure de la table . Voici comment je le fais:
Vider la structure de la base de données de toutes les tables, sans aucune donnée:
Vider ensuite la base de données avec des données, à l'exception des tables exclues, et ne pas vider la structure:
Ensuite, pour le charger dans une nouvelle base de données:
la source
Vous pouvez utiliser la
mysqlpump
commande avec lecommander. Il spécifie une liste de tables séparées par des virgules à exclure.
La syntaxe de mysqlpump est très similaire à mysqldump, mais sa manière est plus performante. Plus d'informations sur la façon d'utiliser l'option d'exclusion que vous pouvez lire ici: https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html#mysqlpump-filtering
la source
Vider toutes les bases de données avec toutes les tables mais ignorer certaines tables
sur github: https://github.com/rubo77/mysql-backup.sh/blob/master/mysql-backup.sh
Avec un peu d'aide de https://stackoverflow.com/a/17016410/1069083
Il utilise lzop qui est beaucoup plus rapide, voir: http://pokecraft.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
la source
J'aime la solution de Rubo77, je ne l'avais pas vue avant de modifier celle de Paul. Celui-ci sauvegarde une seule base de données, à l'exclusion de toutes les tables dont vous ne voulez pas. Il le compressera ensuite et supprimera tous les fichiers de plus de 8 jours. J'utiliserai probablement 2 versions de cela qui font une table complète (moins les journaux) une fois par jour, et une autre qui sauvegarde simplement les tables les plus importantes qui changent le plus chaque heure en utilisant quelques tâches cron.
la source
Par souci d'exhaustivité, voici un script qui pourrait en fait être une ligne pour obtenir une sauvegarde à partir d'une base de données, excluant (ignorant) toutes les vues. Le nom de la base de données est supposé être des employés:
Vous pouvez mettre à jour la logique de la requête. En général, en utilisant
group_concat
etconcat
vous pouvez générer presque n'importe quelle chaîne ou commande shell souhaitée.la source
En général, vous devez utiliser cette fonctionnalité lorsque vous ne voulez pas ou n'avez pas le temps de traiter une énorme table. Si tel est votre cas, il est préférable d'utiliser l'option --where de mysqldump limitant le jeu de résultats. Par exemple
mysqldump -uuser -ppass database --where="1 = 1 LIMIT 500000" > resultset.sql
,.la source