2008-09-25 30 views

Respuesta

8

mysqldump se puede dar una consulta SQL para ejecutar, de la que se llevará a los datos para el vertedero. Luego puede usar la cláusula "límite X" en su consulta para restringir el número de filas.

171

Como dice skaffman, utilice la opción --donde:

mysqldump --opt --where="1 limit 1000000" database 

Por supuesto, que le daría el primer millón de filas de cada tabla.

+12

¿Qué significa el "1" antes del límite? – Phob

+24

@Phob: La opción --where se anexa básicamente a una consulta de la forma 'SELECT * de la tabla WHERE', por lo que en este caso obtienes 'SELECT * de la tabla WHERE 1 limit 1000000'. Sin el 1, tendrías una consulta no válida. Especificando 1 para una cláusula where (ya que 1 es siempre verdadero) simplemente selecciona todos los registros. –

+20

Wow, qué hackeo. Entonces, básicamente, SQL puede inyectarse de esta manera. – Phob

-6

Ustedes pueden manejarlo desde PHP de la siguiente manera:

$username = "username"; 
$password = "password"; 
$db = "dbname"; 
$filename ="dumpfilename.sql"; 
$rows = 10; 
exec("mysqldump --opt --where='1 limit ".$rows."' -u ".$username." -p".$password." ".$db." > ".$filename); 

-Cheers,

45

Si desea obtener n registros de una tabla específica que puede hacer algo como esto:

mysqldump --opt --where="1 limit 1000000" database table > dump.sql 

Esto le volcar los primeros 1000000 filas de la tabla denominada table en el archivo dump.sql.

-1

Como la orden predeterminada es ASC, que rara vez es lo que quiere en esta situación, necesita tener un diseño de base de datos adecuado para que DESC funcione de la caja. Si todas las tablas tienen UNO columna de clave principal con el mismo nombre (natural o sustituto) se puede volcar fácilmente los n últimos registros usando:

mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql 

Esta es una razón perfecta para qué usted debe nombrar siempre tu ID de PK y evite las PK compuestas, incluso en tablas de asociación (en su lugar, utilice claves sustitutas).

+0

Haga esto (identifique el nombre y evite las PK compuestas) y deberá ignorar la teoría de la base de datos relacional. – mpoletto

+0

En realidad, si diseña su base de datos siguiendo las mejores prácticas de la base de datos relacional, definiendo sus PK basadas en datos y entidades, puede usar --option --where = "1 LIMIT 10000" por ejemplo. Sin ORDER BY, esto funcionará porque MySQL ordenará de manera natural, lo que equivale a decir que seguirá el orden de índice de PK. Entonces, todos los FK de tablas relacionadas tendrán solo datos que existan en la tabla de referencia porque el orden será el mismo. – mpoletto

+0

El uso de ID es una verdadera plaga de muchos desarrolladores. Tener ID's como PK's es lo mismo que no tener PK's. Su integridad fue ir al hoyo porque, en la mayoría de los casos, un número de incremento automático no tiene nada que ver con los datos de la entidad. – mpoletto

Cuestiones relacionadas