mysqldump-Estructura de exportación solo sin autoincremento


Tengo una base de datos MySQL y estoy tratando de encontrar una manera de exportar solo su estructura, sin los valores de incremento automático. mysqldump --no-data casi haría el trabajo, pero mantiene los valores auto_increment. ¿Hay alguna manera de hacerlo sin usar phpMyAdmin (que sé que puede hacerlo)?

Author: Paris, 2013-03-27

5 answers

Puedes hacer esto:

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

Como han mencionado otros, si quieres que sed funcione correctamente, agrega el parámetro g (para greemplazo lobal) de la siguiente manera:

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

(esto solo funciona si tiene herramientas GUI instaladas: mysqldump --skip-auto-increment)

 50
Author: JoDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-09 10:25:56

La respuesta de JoDev funcionó perfectamente para mí con un pequeño ajuste a la expresión regular sed:

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
 40
Author: JohnW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-12 18:09:30

Es --create-options, que se incluye con opt opt, por defecto, lo que genera las definiciones de la tabla AUTO_INCREMENT.

Si solo quieres las tablas 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 quieres vistas, disparadores y rutinas también,

mysqldump -hlocalhost -uuser -ppass \
    --skip-opt --events --routines --no-data \
    schemaname
 3
Author: Ian Schoonover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-29 01:50:46

Gracias a este post, pude responder a mi pregunta:

¿Cómo puedo hacer el control de versiones en mi base de datos?

Entonces acabo de crear este 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"

Luego agregué esto a crontab:

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

Luego en mi repositorio agregué el resultado, db_structure.sql a git y antes de empujar cambios a prod siempre compruebo si hay algún cambio estructural que olvidé hacer en todos los dbs.

 1
Author: Gerardo Rosciano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-30 08:56:01

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

 -1
Author: Zio Panzu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-14 15:37:44