Há sempre outras opções :).
No meu caso, usar um dump estava fora de questão porque também temos um banco de dados muito grande (1,2 GB quando reduzido ao essencial,> 250 GB ao vivo). Em vez disso, tenho vários arquivos .sql que removem quaisquer registros que foram inseridos por um teste específico.
Tenho uma classe DbHelper que possui essa função para executar consultas:
public function executeOnDatabase($path_to_sql_file)
{
$sql = file_get_contents($path_to_sql_file);
$dbh = $this->getModule('Db')->dbh;
$this->debugSection('Query', $sql);
$sth = $dbh->prepare($sql);
return $sth->execute();
}
Funciona como um encanto, e não há mais sobrecarga executando os testes.
Atualizar:
Se você lida com usuários e seus dados relacionados, geralmente é muito fácil segmentar todos os registros que você precisa remover. Provavelmente, o nome de usuário e o email são exclusivos e você pode usá-los para obter o id (chave primária de incremento automático) do usuário. Esse id provavelmente é usado nas tabelas relacionadas. Por exemplo, assim:
SET @user_id = (SELECT `id` FROM `users` WHERE `username` = 'rgsfdg');
SET @email = '[email protected]';
DELETE FROM `mail_queue` WHERE `send_to` = @email;
DELETE FROM `user_settings` WHERE `user_id` = @user_id;
DELETE FROM `users` WHERE `id` = @user_id;