Вопрос про систему контроля версий для БД MySQL

StalkerClasses

Новичок
Git освоил и как оказалось очень удобно, хотя и все равно еще не до конца все понимаю.
Но как быть с MySQL БД. С помощью чего можно отслеживать, и если нужно откатить изменения в БД?

У меня пока бэкапится 1 раз в стуки вся БД (структура + содержимое) и отправляется на bitbucket.
Когда делаю clone репозитория - выкачиваюстся все sql файлы от туда по датам разложенные.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Не надо путать бэкапы и версионирование. Версионирование данных в mysql тебе не нужно.
 

jonjonson

Охренеть
Нужно различать изменения структуры и данных.
Структура обычно меняется через миграции.
А состояние данных обычно за большой период отслеживается через дампы, а за короткий период (в течение суток обычно) через лог запросов.
 

fixxxer

К.О.
Партнер клуба
Все, что есть в базе, можно разделить на три вещи.

1) Структура базы. Определяется миграциями. Например: Doctrine Migrations, Laravel Migrations, PhpMig. В принципе, все реализции похожи: есть набор миграций, в имени которых содержится timestamp их создания, по которому они упорядочены. Как правило, это php-класс с методами up (применить миграцию) и down (откатить миграцию). При этом где-то хранится список примененных миграций (например, в табличке migrations).

2) "Системные" данные, которые надо инициализировать сразу после создания базы (например, какой-нибудь изначальный набор категорий товаров в магазине). Сюда же тестовые данные, которые удобно записать в базу для разработки или для запуска интеграционных тестов. Процесс записи этих данные в базу называется database seeding; seeder - это просто какой-нибудь класс, который данные пишет. В контексте тестов ровно то же самое называется data fixtures. Например: Laravel Database Seeding, Doctrine Data Fixtures. Может быть реализовано просто как классы и cli-скрипт для их запуска.

3) Собственно, все остальные данные, которые появляются в результате работы приложения, в основном на продакшене (девел/тест-данные ценности не представляют). Базу надо бэкапить. Работать с production-базой в devel-среде не надо. Если кажется, что надо, все равно не надо (например, если при определенном наборе данных проявляется какой-то баг, надо написать тест, который его воспроизводит). Если случилось так, что все-таки надо, всегда можно взять дамп из бэкапа production-базы (который, разумеется, делается регулярно), сделать, что хотел, и вернуть все как было.
 

fixxxer

К.О.
Партнер клуба
Ах, да, я забыл ответить на твой вопрос.
База не версионируется. Версионируется код, управляющий структурой базы (миграции). Timestamp последней примененной миграции - это по сути номер версии структуры базы. При деплое запускается команда "применить миграции", которая приводит структуру базы в актуальное состояние. Если нужно откатиться - откатываются миграции и деплоится старый код.
 
Сверху