Я хотел бы создать тестовую базу данных, которая каждый день обновляется данными из производственной базы данных.
НО, Я бы хотел иметь возможность создавать записи в тестовой базе данных и сохранять их, а не перезаписывать.
Мне интересно, есть ли простой способ сделать это.
Обе базы данных работают на одном сервере, так что, очевидно, это исключает репликацию?
Для пояснения вот что бы я хотел сделать:
Сложность заключается в том, что если запись в производственной базе данных удаляется, я хочу, чтобы она была удалена и в тестовой базе данных, поэтому я действительно хочу избавиться от записей в тестовой базе данных, которые больше не существуют в производственной базе данных, если эти записи были созданы в тестовой базе данных.
Похоже, единственный способ сделать это - иметь какую-то таблицу, в которой хранятся метаданные о создаваемых записях? Так, например, примерно так:
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'
);
Я был здесь и хотел немного изменить свой рабочий процесс, чтобы свести к минимуму риск того, что у меня будут производственные данные, которые следовало бы заменить, в моей тестовой базе данных.
Все, что я сделал, было просто:
mysqldump
Производствоassert
он находится в файле (никогда нельзя быть слишком осторожным с записью файлов)Вводимый вами SQL-код следует поддерживать отдельно, возможно, в другом скрипте. Их обычно называют испытательные приспособления. Чтобы абстрагироваться от реализации вашей БД и меньше полагаться на «магию» (т.е. в вашем случае, diff
используя вашу тестовую базу данных с ее предыдущим восстановлением, чтобы увидеть, что было добавлено, а затем увидеть, что было удалено из живого, перекрестные ссылки на первичные / внешние ключи и т.д.) настоящие пользователи, если ваши тестовые.
Одно из преимуществ (для меня) - это что-то вроде:
UPDATE users SET email = CONCAT('gmailusername+', users.name, '@gmail.com')`;
что является мега-отказоустойчивым, если все другие средства не работают (например, ваш фиктивный SMTP-сервер), и почта проскальзывает (опять же, никогда нельзя быть слишком осторожным с этими вещами).
Я думаю ты найдешь объединить таблицы здесь полезно. Просто храните тестовые данные в одной таблице; и иметь ежедневные снимки с производства в другой таблице; и есть таблица слияния этих двух.