restaurar - mysqldump toda la estructura pero solo datos de tablas seleccionadas en un solo comando
mysqldump solo datos (5)
Mi base de datos tiene 3 tablas: tabla1, tabla2 y tabla3
Me gustaría hacer un mysqldump en esta base de datos con las siguientes condiciones:
- Volcado de estructura para todas las mesas.
- Solo volcar datos para tabla1 y tabla2, ignorar datos en tabla3
Actualmente, hago esto con 2 declaraciones de mysqldump.
mysqldump -u user -p -d db > db_structure.sql
mysqldump -u user -p db --ignore-table=db.table3 > table1_and_table2_data.sql
Importarlos en el mismo orden en que fueron volcados (estructura, luego datos de tabla1 y tabla2)
¿Hay alguna manera de combinar esto en un solo comando mysqldump?
Dado que es posible que desee canalizar la salida a otro comando, como lo hice, en lugar de simplemente redirigir a un archivo y anexar a ese archivo en el próximo comando, puede intentar (modificado a partir del ejemplo de stask):
(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |/
your_command
... en mi caso:
(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |/
gzip -9 > filename.sql.gz
Al incluir los dos comandos mysqldump entre paréntesis, se crea una subshell cuya salida canalizamos a gzip y luego la redirigimos a un archivo.
PD: tampoco he podido combinarlo en una sola invocación mysqldump.
En realidad es bastante simple, use las cláusulas de "where" en las tablas en las que no desea datos y dale una condición siempre falsa. Por ejemplo, cargue datos en foo y gah y solo el esquema en la barra:
mysqldump -u ... -p... myDatabase foo bar --where=''1=2'' gah > myfile.sql
Así que sí, puedes hacer esto en una línea.
No creo que puedas hacerlo en un solo comando. Pero definitivamente puede fusionar la salida a un archivo. ¿Por qué no envolverlo en algún script de shell que haga lo siguiente?
mysqldump -u $1 -p$2 -d db > dump.sql && mysqldump -u $1 -p$2 db --ignore-table=db.table3 >> dump.sql
Ejecutará este script con dos parámetros: nombre de usuario y contraseña.
No puede combinarlos en un solo comando, pero puede ejecutar ambos comandos al mismo tiempo y enviarlos al mismo archivo.
mysqldump -u user -p --no-data db > structure.sql; mysqldump -u user -p db table1 table2 >> structure.sql
para evitar tener que ingresar la contraseña dos veces, puede hacer -ppassword
(¡note la falta de espacio!). También use --no-data
en el primer comando o terminará con los datos también. -d no es necesario cuando estás haciendo solo una base de datos.
Puede eliminar la parte INSERT INTO ...
mysqldump /
--opt /
-u ${DB_USER} -p${DB_PASS} /
${DB_NAME} /
| grep -v ''INSERT INTO `table3`'' /
| grep -v ''INSERT INTO `table4`''