Como posso despejar as 1000 linhas mais recentes de todas as tabelas em um banco de dados MySQL para um ambiente de desenvolvimento? - mysql, sql, banco de dados, mysqldump, ambiente de desenvolvimento

Eu estou olhando para criar um banco de dados de desenvolvimento mais leve. Se linhas inseridas recentemente não são um requisito, esta é uma ótima solução:

mysqldump -u root -p -h hostname --single-transaction --opt --where="1 limit 1000" dbname > dump.sql

Isso despeja as primeiras 1000 linhas de cada tabela no banco de dados.

Mas como eu posso despejar o último 1000 linhas de cada banco de dados?

Seria bastante fácil se cada mesa tivesse um id campo (por exemplo ORDER BY id DESC), mas isso não pode ser contado.

Suponha que as tabelas possam atingir até 100 milhões de linhas. E um despejo de banco de dados completo pode medir no intervalo de 10 a 30 GB.

Respostas:

1 para resposta № 1
-- you need to give your rows a row id, and go from there

ALTER TABLE `tablename `    ADD COLUMN `row_id` INT NULL AFTER `some_column`;

update tablename JOIN    (SELECT @curRow := 0) r set [email protected] := @curRow + 1 ;

-- throw the max row id into a variable:

set @max=(select max(row_id) from tablename );

-- delete or select whatever by that variable:

delete from tablename where row_id< @max-1000

Cardápio