Estoy tratando de cargar una pequeña muestra de registros de una base de datos grande en una base de datos de prueba.
¿Cómo le dice a mysqldump que solo le dé n registros de 8 millones?
Gracias
Como dice skaffman, use la opción --where :
mysqldump --opt --where="1 limit 1000000" database
Por supuesto, eso le daría el primer millón de filas de cada tabla.
Si desea obtener n
registros de una tabla específica, puede hacer algo como esto:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
Esto volcará las primeras 1000000
filas de la tabla nombrada table
en el archivo dump.sql
.
mysqldump puede recibir una consulta SQL para ejecutar, de la cual tomará los datos para el volcado. Luego puede usar la cláusula "límite X" en su consulta para restringir el número de filas.
Como el orden predeterminado es ASC, que rara vez es lo que desea en esta situación, debe tener un diseño de base de datos adecuado para que DESC funcione de inmediato. Si todas sus tablas tienen UNA columna de clave principal con el mismo nombre (natural o sustituto), puede volcar fácilmente los n últimos registros utilizando:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
Esta es una razón perfecta por la cual siempre debe nombrar su ID de PK y evitar los PK compuestos, incluso en las tablas de asociación (en su lugar, use claves sustitutas).
SELECT * from table WHERE
, por lo que en este caso se obtieneSELECT * from table WHERE 1 limit 1000000
. Sin el 1, tendría una consulta no válida. Especificar 1 para una cláusula where (dado que 1 siempre es verdadero) simplemente selecciona todos los registros.mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
para obtener la segunda página de 1 millón de registros. Asegúrese de usar el indicador --no-create-info en páginas que no sean las primeras para volcar solo los datos y dejar de lado las cosas de la tabla de creación .