¿Es posible extraer los valores del mes pasado de un servidor MySQL y construir una nueva base de datos a partir de esos valores?

8

Tengo una tarea para construir una plantilla de máquina virtual de desarrollo.

Necesito agregar al servidor las bases de datos MySQL de cada uno de los productos de mi compañía para que los nuevos desarrolladores tengan la capacidad de desarrollar para cada uno de los productos.

La mayoría de las bases de datos son más pequeñas que 1 GB.

Pero tengo algunas bases de datos que son enormes (alrededor de 160G), pero estoy limitado en el tamaño de la plantilla que estoy tratando de crear, y no es razonable agregar una base de datos de 160GB.

Por lo tanto, estoy tratando de encontrar el método correcto para extraer, digamos, los valores del mes pasado de esta enorme base de datos y agregarlos al servidor para que el desarrollador pueda "sentir" cómo es trabajar en esta base de datos.

¿Es posible hacer tal cosa y cómo se hace? ¡Gracias!

Editar:

Desafortunadamente, no hay una opción para un servidor de base de datos principal separado que contendrá todas las bases de datos de desarrollo, tampoco hay un requisito para actualizar los datos regularmente, solo necesito presentar los mismos datos que en los servidores de producción (en un período de tiempo aleatorio) como entorno de sandbox para nuevos desarrolladores.

Itai Ganot
fuente

Respuestas:

8

Si entendí correctamente, planea hacer una copia de base de datos separada para cada entorno de desarrollo.

Si bien esto podría ser factible con bases de datos pequeñas, no funcionará tan bien con bases de datos grandes. Por lo tanto, a menos que tenga una buena razón para configurar una base de datos separada para cada entorno, sería mejor considerar tener una sola copia de la base de datos de desarrollo y configurar todos los entornos de desarrollo para usarla.

Este enfoque le permitirá actualizar periódicamente la base de datos de desarrollo con los datos más recientes y, si alguien la estropea, puede actualizarla nuevamente.

También imagine la situación en la que sus desarrolladores comienzan a trabajar en algún proyecto nuevo que requiere la creación de nuevas tablas. Si tiene una sola copia de la base de datos de desarrollo, usted (o los desarrolladores) deberán crear esas tablas y llenarlas con datos de prueba solo una vez. Ahora imagine que los desarrolladores se dan cuenta de que la estructura de la tabla inicial no es óptima y necesita ser cambiada. Nuevamente, esto tendrá que hacerse en una única base de datos en lugar de posiblemente decenas de entornos.

Este es el enfoque que vi que se usaba para grandes proyectos una y otra vez y la mayoría de las veces funciona bastante bien.

grekasius
fuente
2
En una tienda donde trabajo, cada desarrollador tiene su propia copia de la base de datos, por lo que nadie pisa los pies de otras personas. Esto funcionó muy bien para nosotros. Tenemos scripts para reconstruir la base de datos desde cero y completarla con los datos de prueba necesarios para el desarrollo. La base de datos única a menudo ha sido problemática porque las personas que trabajan en algunas áreas de la base de datos la han dividido para otras personas. Y luego todos se detienen mientras se restaura una gran base de datos. Por lo tanto, tener una sola base de datos NO es una solución superior. (TBH tampoco lo es. Es situacional.)
Andrew Savinykh
Convenido. Solo por curiosidad, ¿qué tan grandes son sus DB? No puedo ver cómo esto podría funcionar con un DB de 160 GB de tamaño.
grekasius
Por supuesto, las bases de datos de desarrollo serían intencionalmente pequeñas con solo el subconjunto de datos necesarios para probar lo que sea que los desarrolladores estén trabajando. Para fines tales como pruebas de rendimiento, se utilizaría una instancia separada (más grande).
Andrew Savinykh
No estoy obligado a actualizar los datos regularmente, solo para colocarlos una vez en esta plantilla.
Itai Ganot
Eche un vistazo si puede crear un pequeño conjunto de datos de muestra a partir de su base de datos actual. No hay una respuesta directa aquí desafortunadamente. Lo que debe hacer depende de los datos que tenga y de lo que elija poner en esa base de datos de desarrollo.
grekasius
4

Esto es extremadamente dependiente del tipo de datos en la base de datos. En algunos casos, puede ser tan fácil como

select * from table where date > ....

mientras que en otros casos, es imposible separar esto debido a la estructura de los datos. Al final, probablemente será una mezcla y será muy difícil acertar.

Sven
fuente
2
Específicamente, algunas bases de datos pueden tener entradas más nuevas (por ejemplo, <1 mes) que hacen referencia a registros de entradas más antiguas (por ejemplo,> 1 mes). La forma en que los maneje depende completamente de cómo se configuran estas referencias, y no es factible para todos, excepto para los más básicos.
Bob
0

Recientemente tuvimos la situación de que un cliente quería extraer los últimos 30 días de una base de datos. Si TODAS las tablas tienen el mismo atributo donde puede definir la fecha y hora, puede hacer un

mysqldump --where = 'datetimefield> "2014-06-28"'

pero quería mezclar diferentes tablas con datos antiguos y nuevos. Entonces, ¿no fue una solución para él, pero podría ser una para ti?

shinguz
fuente