De retour le 16 décembre 2011, j'ai répondu à la question Comment pouvez-vous mysqldump table (s) spécifique (s)?
J'ai collecté toutes les tables sans inclure un certain ensemble de noms de table.
En utilisant les mêmes principes, vous auriez pu collecter tous les noms de base de données de la table de métadonnées information_schema.schemata
que vous souhaitez mysqldump, créer une requête pour renvoyer cette liste, puis utiliser cette liste de bases de données pour formuler la commande mysqldump.
DATABASES_TO_EXCLUDE="db1 db2 db3"
EXCLUSION_LIST="'information_schema','mysql'"
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
for DB in `mysql -ANe"${SQLSTMT}"`
do
MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
done
MYSQLDUMP_OPTIONS="--routines --triggers"
mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} > MySQLDatabases.sql
Tout ce que vous devez faire est de mettre les bases de données dans lesquelles vous ne voulez pas que mysqldump'd DATABASES_TO_EXCLUDE
Essaie !!!
RolandoMySQLDBA
la source
information_schema
qu'il ne soit de toute façon pas vidé.mysqldump does not dump the INFORMATION_SCHEMA or performance_schema database by default. To dump either of these, name it explicitly on the command line and also use the --skip-lock-tables option. You can also name them with the --databases option. Before MySQL 5.5 mysqldump silently ignores INFORMATION_SCHEMA even if you name it explicitly on the command line.
dev.mysql.com/doc/refman/5.5/en/mysqldump.htmlUtilisez grep pour exclure les bases de données dont vous ne voulez pas:
En regardant /programming/19354870/bash-command-line-and-input-limit, il semble que vous serez en mesure de gérer les longues lignes. Sinon, vous pouvez toujours
la source
grep
afin de passer de la sortie multiligne à une seule ligne avec chaque nom de base de données séparé par un espace, ce qui est requis parmysqldump
. Donc, la commande seracandidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$" | paste -sd " " -)
Je ne pense pas que ce soit possible, mais vous pouvez essayer ces solutions que vous devrez taper les noms de toutes les bases de données que vous souhaitez vider.
Faites-moi savoir si la solution est utile.
la source
Même ici, il y a tant d'excellentes réponses, donc ce message est juste pour ajouter un choix de plus. En dessous de 2 lignes dans le script, vous pouvez prendre toutes vos sauvegardes de DB en ignorant certaines DB.
la source
sys
car cela fait partie de MySQL 5.7Alternativement, vous pouvez consulter les liens suivants;
Mysqldump Ignore Option de base de données
Quelques hacks pour simuler mysqldump --ignore-database
Implémentation de mysqldump –ignore-database
Faites-moi savoir si la solution est utile.
Bonne chance!
la source
Beaucoup ont toujours voulu que mysqldump ignore les bases de données.
Croiriez-vous que cette option existe maintenant ??? Non, pas dans mysqldump.
Oracle (Yuck, toowee, ne roule toujours pas) a DataPump (expdb impdp) pour vider les bases de données Oracle. Depuis MySQL 5.7 dans la famille Oracle (toujours en difficulté), le nouvel utilitaire de sauvegarde s'appelle mysqlpump , qui est fourni avec --exclude-databases et d'autres options intéressantes . Comme son ancien datapump stepbrother , mysqlpump propose également le parallélisme pour aider à accélérer les vidages et à diviser le travail . Pour le moment, je ne me suis pas intégré au travail, mais cela semble très prometteur. Quand je plonge profondément dans mysqlpump, je pourrais trouver qu'il apporte le même look and feel que le datapump d'Oracle .
S'il y a quelqu'un dans MySQL Parallel Universe avec des histoires à ce sujet, veuillez le poster ici.
la source
La réponse de Rolando est plutôt bonne, mais je voulais un script qui puisse être réutilisé sur plusieurs projets. J'ai donc pris son script et l'ai modifié pour que vous puissiez faire des choses comme:
Voici le script modifié:
(J'espère toujours qu'une
--ignore-database
option sera ajoutée à une future version de mysqldump)la source
Depuis MySQL 5.7.8, vous pouvez utiliser
mysqlpump
(qui n'est PAS le même quemysqldump
) comme suit:Il suffit de remplacer
db1,db2,db3,db4
par les quatre bases de données que vous souhaitez exclure.Source: Blog du serveur MySQL
la source