92 votes

mysqldump - Exportation de la structure seulement sans auto-incrément

J'ai une base de données MySQL et j'essaie de trouver un moyen d'exporter uniquement sa structure, sans les valeurs d'auto-incrémentation. mysqldump --no-data ferait presque l'affaire, mais il conserve les valeurs d'auto-incrémentation. Y a-t-il un moyen de le faire sans utiliser PHPMyAdmin (dont je sais qu'il peut le faire) ?

76voto

JoDev Points 2354

Vous pouvez le faire :

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql

Comme mentionné par d'autres, si vous voulez sed pour qu'il fonctionne correctement, ajoutez le g (para g remplacement lobal) comme ceci :

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql

(cela ne fonctionne que si vous avez installé GUI Tools : mysqldump --skip-auto-increment )

Nouvelle mise à jour grâce aux commentaires.

En \b est inutile et casse parfois la commande. Voir ce qui suit Sujet SO pour des explications. La réponse optimisée serait donc :

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*//g' > <filename>.sql

54voto

JohnW Points 1

La réponse de JoDev a parfaitement fonctionné pour moi avec un petit ajustement de l'expression régulière sed :

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql

4voto

Ian Schoonover Points 358

C'est --create-options, qui est inclus avec --opt, par défaut, qui génère les définitions de table AUTO_INCREMENT.

Si vous ne voulez que les tables de base,

mysql -hlocalhost -uuser -ppass --skip-column-names --batch \
    -e "select table_name from tables where table_type = 'BASE TABLE' and table_schema = 'schemaname'" INFORMATION_SCHEMA \
| xargs mysqldump -hlocalhost -uuser -ppass \
    --no-data --skip-triggers --skip-opt --no-create-db \
    schemaname

Si vous voulez des vues, des déclencheurs et des routines aussi,

mysqldump -hlocalhost -uuser -ppass \
    --skip-opt --events --routines --no-data \
    schemaname

2voto

Gerardo Rosciano Points 703

Grâce à ce billet, j'ai pu répondre à ma question :

Comment puis-je faire un contrôle de version sur ma base de données ?

Puis j'ai juste créé ce script : db_bkp.sh

#!/bin/sh
filename="db_structure.sql"
backupfolder="/var/www/"
fpath="$backupfolder/$filename"
usr="DBUSER"
pass="DBPASS"
db="DBNAME"
mysqldump --user=$usr --password=$pass --no-data $db | sed 's/ AUTO_INCREMENT=[0-9]*//g' > "$fpath"

Puis j'ai ajouté ceci à la crontab :

30 5 * * * sh /home/scripts/db_bkp.sh

Puis dans mon repo j'ai ajouté le résultat, db_structure.sql à git et avant de pousser les changements à prod, je vérifie toujours s'il y a des changements structurels que j'ai oublié de faire sur tous les dbs.

-2voto

Zio Panzu Points 20

Mysqldump -u [USER] -p [PASSWORD] -d --skip-opt --single-transaction [DB_SCHEMA] > [FILE.ESTENSIONE]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X