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 de auto_increment. ¿Hay alguna forma de hacerlo sin usar PHPMyAdmin (que sé que puede hacerlo)?
87
--no-data
omitirá los valores de auto_increment por defecto.Respuestas:
Puedes hacerlo :
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 usted quiere
sed
que funcione correctamente, añadir elg
(para g parámetro de sustitución lobal) así:mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql
(esto sólo funciona si dispone de herramientas de interfaz gráfica de usuario:
mysqldump --skip-auto-increment
)Nueva ACTUALIZACIÓN gracias a los comentarios.
El
\b
es inútil ya veces se romperá el comando. Consulte este tema de SO para obtener explicaciones. Entonces la respuesta optimizada sería:mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*//g' > <filename>.sql
fuente
--skip-auto-increment
sea una opción real. No lo encuentro en la documentación . Ninguno de los dos errores de MySQL para este problema lo menciona: 20786 , 30957 . ¿Qué versión de mysqldump tiene esta opción?--skip-auto-increment
es una opción agregada en MySQL GUI Tools si se recuerda correctamente. (no estoy seguro ^^) ¡Así que de hecho no es una solución! Pero el segundo comando en línea es correcto, lo encontré aquí, donde el tema habla sobre el problema del autoincremento y proporciona la idea desed
filtrado.La respuesta de JoDev funcionó perfectamente para mí con un pequeño ajuste a la expresión regular sed:
fuente
\b
hace eso dentro de la declaración sed, pero según la sugerencia de @ JohnW aquí, la eliminación de ese interruptor también funciona para mí.Es --create-options, que se incluye con --opt, de forma predeterminada, lo que genera las definiciones de la tabla AUTO_INCREMENT.
Si solo quiere 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 también desea vistas, activadores y rutinas,
mysqldump -hlocalhost -uuser -ppass \ --skip-opt --events --routines --no-data \ schemaname
fuente
drop table
s, conjuntos de caracteres, etc.Gracias a esta publicación, pude responder mi pregunta:
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:
Luego, en mi repositorio agregué el resultado,
db_structure.sql
a git y antes de presionar cambios a prod, siempre verifico si hay algún cambio estructural que olvidé hacer en todas las bases de datos.fuente
mysqldump -u [USUARIO] -p [CONTRASEÑA] -d --skip-opt --single-transaction [DB_SCHEMA]> [FILE.ESTENSIONE]
fuente
--skip-opt
discutido aquí y aquí.