Решение для контроля версий и развертывания базы данных?

11

В настоящее время я использую скрипт дампа и фиксирую базу данных в git-репо. --skip-extended-insert --skip-comments --skip-dump-dateозначает, что diff может дать мне четкое представление о том, что изменилось, но все это рухнет, если я попытаюсь слиться.

WP_SITEURL, WP_HOME и все другие места WordPress хранит полные URL-адреса, которые необходимо обновить при импорте на другой хост (тестирование, подготовка, производство)

Кто-нибудь использует лучший метод?

Главные проблемы:

  • Wordpress хранит полные URL по всей базе данных (непереносимые)
  • Много других, не относящихся к делу изменений записей
    • значения auto_increment (я просто удаляю их, но столкнулся с проблемами идентификатора)
    • временные метки (также могут быть удалены)
    • переходные * записи ... не знаю, что с ними делать

Процесс, который создавал временные миграции, с добавлением или удалением только вещей, был бы идеальным ... но я не уверен, возможно ли это вообще?

Джейкоб Дорман
источник
Хотите ли вы версионировать все изменения данных или только изменения в структуре ? а это твоя настоящая БИЗНЕС-ЗАДАЧА?
Ленивый барсук
При внесении изменений в CMS, таких как WordPress, часто происходят изменения содержимого и конфигурации (данных БД) наряду с изменениями логики (кода). Я хотел бы иметь возможность версии обоих. Изменения структуры были бы хорошим началом ... БИЗНЕС-ЗАДАЧА: клиент запрашивает новый виджет. Установите плагин на промежуточном сервере, подтвердите репо -> Настроить плагин и добавьте пример содержимого -> после утверждения, внесите изменения кода в производство, а затем вручную внесите те же изменения данных в производственный администратор.
Джейкоб Дорман
1
@JacobDorman Я пытаюсь решить эту же проблему. Вы уже что-нибудь придумали? После некоторых исследований я начинаю думать, что нужен какой-то пользовательский плагин, который создает определенный скрипт обновления (вероятно, для экспорта только изменений конфигурации, таких как установленные плагины и параметры конфигурации - и не обязательно посты, категории и контент в целом) , Хотелось бы услышать, если у вас есть другие идеи.
Виктор Лопес Гарсия

Ответы:

4

Вот два возможных решения, оба они на самом деле являются общими инструментами контроля версий MySQL, но могут быть адаптированы к вашему рабочему процессу:

dbv.php

Этот инструмент создает «миграции», которые в основном являются сценариями SQL, из изменений, обнаруженных в базе данных. Эти сценарии хранятся в локальном каталоге и, таким образом, могут быть переданы в вашу текущую VCS (например, git).

Он используется через веб-интерфейс PHP.

DBVC

Принципиально похож на предыдущий инструмент, он основан на интерфейсе командной строки. Это настраивается через файл JSON. Основное отличие состоит в том, что он не генерирует файлы миграции автоматически.

Существует нерешенная проблема для интеграции этого с предыдущим аналогичным, так что это то, что нужно искать.

Плагины для Wordpress

Некоторые плагины, которые могут помочь в создании повторяемого рабочего процесса:

Виктор Лопес Гарсия
источник
dbvc выглядит как инструмент, который я искал. Спасибо!
Джейкоб Дорман
1
Я рад, что это помогло. Я только что нашел другой интересный инструмент, он некоторое время не обновлялся, но, возможно, стоило бы поиграть в него: github.com/idler/MMP
Víctor López García
@JacobDorman С DBVC, вы можете успешно объединить изменения БД из разных сред? Я разработал собственную стратегию , но DBVC создает файлы обновления или вам нужно использовать что-то вроде mysqldiff между дампами SQL? Я не могу представить, что этот инструмент полезен, если только он не помогает создавать различия в SQL, которые на самом деле сопоставимы, особенно параметры оператора INSERT в отдельных строках ... хотя я полагаю, что для этого можно отредактировать файл ...
Спенсер Уильямс,
@SpencerWilliams Я не заканчивал тем, что использовал DBVC (и не использовал mysqldiff), но все еще добавляю дампы базы данных в контроль версий ... Я действительно не вижу их как слитые в большинстве случаев, но использование различий вне сравнения может помочь выделить изменения и проблемы.
Джейкоб Дорман
@victor Я проверил MMP. Это делает изменения схемы, но не различие / вставки данных.
Дэвид Сильва Смит
2

Я делаю это на MYSQL.

Он помещает все схемы таблиц и данные в их собственный файл, чтобы я мог легко увидеть, что изменилось.

В отличие от большинства других решений в этом потоке, это решение получает данные, что важно для CMS.

Это решение не использует никаких инструментов, только скрипт командной строки.

изменить: я обнаружил, что мой старый код был ошибка, где порядок импорта был важен. снятие --compactфлага исправляет ошибку.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Старый код

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

а вот как импортировать

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
Дэвид Сильва Смит
источник