Je voudrais créer une base de données de test qui est rafraîchie chaque jour avec les données de la base de données de production.
MAIS, je voudrais pouvoir créer des enregistrements dans la base de données de test et les conserver au lieu de les écraser.
Je me demande s'il y a un moyen simple et direct de le faire.
Les deux bases de données tournent sur le même serveur, donc apparemment cela exclut la réplication?
Pour clarification, voici ce que je voudrais se produire:
- La base de données de test est créée avec des données de production
- Je crée quelques enregistrements de test que je veux garder fonctionnant sur le serveur de test (essentiellement pour avoir des enregistrements d'exemple avec lesquels je peux jouer)
- Le lendemain, la base de données est complètement rafraîchie, mais les enregistrements que j'ai créés ce jour-là sont conservés. Les enregistrements qui n'ont pas été touchés ce jour-là sont remplacés par des enregistrements de la base de données de production.
La complication est que si un enregistrement de la base de données de production est supprimé, je veux qu'il soit également supprimé de la base de données de test, donc je veux me débarrasser des enregistrements dans la base de données de test qui n'existent plus dans la base de production, sauf si ces enregistrements ont été créés dans la base de données de test.
Il semble que le seul moyen de faire cela serait d'avoir une sorte de table stockant des métadonnées sur les enregistrements créés? Donc par exemple, quelque chose comme ceci:
CREATE TABLE MetaDataRecords (
id integer not null primary key auto_increment,
tablename varchar(100),
action char(1),
pk varchar(100)
);
DELETE FROM testdb.users
WHERE
NOT EXISTS (SELECT * from proddb.users WHERE proddb.users.id=testdb.users.id) AND
NOT EXISTS (SELECT * from testdb.MetaDataRecords
WHERE
testdb.MetaDataRecords.pk=testdb.users.pk AND
testdb.MetaDataRecords.action='C' AND
testdb.MetaDataRecords.tablename='users'
);