J'ai une base de données MySQL et j'essaie de trouver un moyen d'exporter sa structure uniquement, sans les valeurs d'incrémentation automatique. mysqldump --no-data
ferait presque l'affaire, mais il conservera les valeurs auto_increment. Est-il possible de le faire sans utiliser PHPMyAdmin (pour que je sache qu'il peut le faire)?
Tu peux 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 que sed
fonctionne correctement, ajoutez le paramètre g
(pour g lobal replacement), comme suit:
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é des outils graphiques: mysqldump --skip-auto-increment
)
La réponse de JoDev a parfaitement fonctionné pour moi avec un petit ajustement à l'expression régulière sed:
mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
C'est --create-options, qui est inclus avec --opt, par défaut, qui génère les définitions de la table AUTO_INCREMENT.
Si vous voulez seulement 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 aussi des vues, des déclencheurs et des routines,
mysqldump -hlocalhost -uuser -ppass \
--skip-opt --events --routines --no-data \
schemaname
Grâce à ce post, j'ai pu répondre à ma question:
Comment puis-je contrôler la version de ma base de données?
Ensuite, je viens de créer 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 à crontab:
30 5 * * * sh /home/scripts/db_bkp.sh
Puis, dans mon référentiel, j'ai ajouté le résultat, db_structure.sql
à git et avant de mettre les modifications à la production, je vérifie toujours s'il y a des modifications structurelles que j'ai oubliées de faire sur toutes les bases.
Juste pour utiliser --add-drop-table comme ceci:
mysqldump --no-data --add-drop-table
voir mysql bugs et mysql dev