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


11

В даний час я використовую дамп-скрипт і передаю базу даних на git repo. --skip-extended-insert --skip-comments --skip-dump-dateозначає, що різниця може дати мені гарне уявлення про те, що змінилося, але все падає, якщо я спробую злитись.

WP_SITEURL, WP_HOME та всі інші місця Wordpress зберігають повні URL-адреси, необхідні для оновлення під час імпорту на інший хост (тестування, постановка, виготовлення)

Хтось використовує кращий метод?

Основні питання:

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

Процес, який створив міграцію з часовими позначками, з додаванням або видаленням лише тих речей, був би ідеальним ... але я не впевнений, чи це можливо?


Ви хочете версії всіх змін даних чи лише змін у структурі ? і це ваш справжній БІЗНЕС-ЗАВДАННЯ?
Ледачий борсук

Під час внесення змін у CMS, як Wordpress, часто відбуваються зміни вмісту та конфігурації (дані БД), а також зміни логіки (коду). Я хотів би мати можливість обидві версії. Зміни структури були б хорошим початком ... БІЗНЕС-ЗАВДАННЯ: клієнт запитує новий віджет. Встановіть плагін на сервісі постановки, виконайте перезавантаження -> Налаштуйте плагін і додайте зразок вмісту -> як тільки це буде затверджено, витягніть зміни коду до виробництва, а потім вручну внесіть ті самі зміни даних у адміністратор виробництва.
Якоб Дорман

1
@JacobDorman Я намагаюся вирішити цю саме цю проблему. Ви щось ще розробили? Після деяких досліджень я починаю думати, що якийсь спеціальний плагін, який створює певний скрипт оновлення, у порядку (ймовірно, експортувати лише зміни конфігурації, такі як встановлені плагіни та параметри конфігурації - а не обов’язково повідомлення, категорії та контент взагалі) . Було б хотіти почути, якщо у вас є якісь інші ідеї.
Víctor López García

Відповіді:


4

Ось два можливі рішення, обидва з них - це загальні засоби управління версіями MySQL, але їх можна адаптувати до вашого робочого процесу:

dbv.php

Цей інструмент створює "міграції", які в основному є сценаріями SQL, із змін, виявлених у базі даних. Ці сценарії зберігаються у локальному каталозі і, таким чином, можуть бути передані вашому поточному VCS (наприклад, git).

Він використовується через веб-інтерфейс PHP.

DBVC

Принципово подібний до попереднього інструменту, це засновано на інтерфейсі командного рядка. Він налаштований через файл json. Основна відмінність полягає в тому, що він не генерує автоматично файли міграції.

Існує певна проблема, щоб інтегрувати це з попереднім аналогічним, тому це є що шукати.

Wordpress плагіни

Деякі плагіни, які можуть допомогти у створенні повторюваного робочого процесу:


dbvc виглядає як інструмент, який я шукав. Спасибі!
Джейкоб Дорман

1
Я радий, що це допомогло. Щойно я знайшов ще один цікавий інструмент, він не оновлювався з часом, але, можливо, варто скористатись певним веб-сайтом за
Víctor López García

@JacobDorman За допомогою DBVC ви можете успішно об'єднати зміни БД з різних середовищ? Я створив власну стратегію , але чи створює DBVC файли оновлення або вам потрібно використовувати щось на зразок mysqldiff між дампами SQL? Я не можу уявити, що цей інструмент є корисним, якщо він не допоможе створити різниці SQL, які насправді порівнянні, особливо параметри оператора INSERT в окремих рядках ... хоча я припускаю, що файл міг би бути відредагований для вирішення цього питання ...
Спенсер Вільямс

@SpencerWilliams Я до кінця не використовував DBVC (і не використовував mysqldiff), але все ще додаю db-відвалів до контролю версій ... Я насправді не вважаю їх об'єднаними в більшості випадків, але відрізняються використанням поза порівнянням можуть допомогти виділити зміни та проблеми.
Джейкоб Дорман

@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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.