Det finns alltid andra alternativ :).
I mitt fall var det uteslutet att använda en dump eftersom vi också har en mycket stor databas (1,2 GB när det är avskalat till det väsentliga,>250 GB på live). Istället har jag ett gäng .sql-filer som tar bort alla poster som infogades av ett specifikt test.
Jag har en klass DbHelper som har denna funktion för att köra frågor:
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();
}
Fungerar som en charm, och inte längre att köra testerna.
Uppdatering:
Om du hanterar användare och deras relaterade data är det vanligtvis ganska enkelt att rikta in alla poster du behöver ta bort. Mest troligt är användarnamnet och e-postadressen unika, och du kan använda dem för att få användarens id (automatisk inkrementering av primärnyckeln). Detta ID används troligen i de relaterade tabellerna. Till exempel så här:
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;