Синхронізація бази даних між розробкою / постановкою та виробництвом


36

У мене проблема з синхронізацією бази даних WordPress між розробкою та виробництвом, і мені цікаво, як інші люди її вирішують. Мені відомо про це питання, але воно насправді не охоплює більш неприємний і реалістичний випадок використання.

Скажіть, у мене є живий веб-сайт WordPress. Я взяв демпфер всього, тиражуючи це на нашому середовищі розробників. Я почав робити зміни. Через 1 тиждень я готовий розгорнути свої оновлення. Тим часом база даних на виробничому майданчику змінилася (нові повідомлення, нові коментарі тощо). Як я синхронізую зміни між виробництвом та розробкою під час впровадження та чи можна автоматизувати (хоча б дещо) цей процес?



Спробуйте цей плагін wordpress.org/extend/plugins/duplicator
Gopal Bhattacharjee

Відповіді:


10

Можливо, є кращий спосіб, який мені не вистачає, але я надам вам два варіанти:

1. Використовуйте Експорт XML для експорту ваших нових публікацій та коментарів. Потім використовуйте імпортер WordPress, щоб імпортувати нові повідомлення та коментарі назад у базу даних розробників

Найкраще імпортувати в розробник, а потім перенести базу даних на виробництво, оскільки при імпорті вона завантажить усі нові медіа-файли з виробництва.

Тим часом виробництво змінилося (нові повідомлення, нові коментарі тощо)

Це вирішить вашу проблему із залученням будь-якого зміненого вмісту.

2. Використовуйте команду INSERT IGNORE INTO MySql, щоб додати нові таблиці з dev. або команда ЗАМОВИТИ, щоб перезаписати повторювані рядки в одній таблиці.

Перед використанням MySql зробіть резервну копію обох баз даних і перемістіть базу даних gz на виробничий сервер та завантажте дамп (змініть ім’я dev, якщо воно збігається з виробництвом.

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`

Мені не комфортно з командами MySql, тому я б пішов з варіантом 1.


помічайте місця експорту XML десь із кількістю публікацій, наприклад, у своєму блозі +10 000 публікацій, я не можу його використовувати.
edelwater

@edelwater, так, це залежить від налаштувань сервера для max_execution_time (зазвичай 30 секунд), для дуже великого експорту це значення повинно бути встановлено вище (1-2 хвилини і більше)
mike23

2

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

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


2
Влучне зауваження! Однак якщо виробництво має деякі зміни в суто змістовій області (публікації, коментарі), а Dev має зміни в налаштуваннях скажімо і налаштуваннях (наприклад, додав 5 плагінів і налаштував їх налаштування), як би ви перенесли ці зміни в налаштуваннях, не працюючи дійсно двічі (один час на розробку і один на виробництво)?
Олексій

це справжнє питання не так, і я не маю на нього відповіді.
курсизм,

-1. Іноді нам потрібно синхронізувати їх. Спеціально для публікації / сторінок idіз бази даних.
Франсіско Корралес Моралес

2

Як тільки ви торкаєтесь теми паралельних змін, ви торкаєтесь області управління конфігурацією. З великою кількістю шаблонів, власних спільнот (http://www.cmcrossroads.com/) та інструментів не стільки для управління версіями (як svn / git), скільки для підтримки управління конфігурацією (шаблони), як прозорий регістр. (абсолютно різні райони).

У цьому випадку це все-таки проста ситуація, і ви виявите, що це працює з деякими обмеженнями, ручною роботою та деякими списками.

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

Якщо ви хочете зробити це трохи професійніше:

а) запишіть список усіх елементів конфігурації, з якими ви стикаєтесь, це може бути сам код WordPress, плагіни із зовнішніх, вмісту, метаданих та вирішіть, які з них ви хочете залучити під якесь "управління", які важливі.

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

в) для паралельної роботи спочатку опишіть, якими КІ ви хочете керувати, вирішіть, чи завжди потік від розвитку до виробництва чи дійсно потрібно зробити все це двома способами.

г) для кожного з типів ІС у пункті (а) написати резолюцію. Наприклад, для ВСЕ, що є текстом (або експортованим текстом, як файли PHP, але ТАКОЖ звичайним текстом у файлах XML) можливе об'єднання. Це насправді не проблема, але вам потрібен хороший інструмент злиття. Наприклад, з ClearCase ви отримаєте 3-х спосіб злиття наступних ситуацій: 1) тривіальне злиття: це зробить це автоматично 2) нетривіальне автоматичне: це зробить автоматично, але вам потрібно перевірити це 3) нетривіально неавтоматично: це це конфлікт, наприклад, на 1 рядку було внесено кілька змін. Нетривіальні дані - це мінімальна частина, про яку потрібно піклуватися вручну; хороший інструмент злиття приведе вас до цього, наприклад, в прозорому регістрі (який також робить об'єднання слів і де ви можете зв’язати інші комерційні чи некомерційні злиття для конкретного файлу типи). Furtermore, якщо ви визначили під (a) файли, які слід скопіювати, лише тоді їх поведінку було б не об'єднати, а просто скопіювати в один бік, перезаписавши іншу версію без злиття (наприклад, плагіни, які ви не модифікували). Багато з цих типів можливі з різною поведінкою. Але запишіть відносини між КІ,

Тоді для нетекстового злиття потрібно прийняти рішення, як поводитися з ними, наприклад зображення, які були змінені в 2 місцях. Ви можете вирішити, що виробництво завжди має перевагу (принаймні, це я вважаю), що робить його простим.

Отже ... для вирішення цієї проблеми вам потрібен інструмент управління версіями, який підтримує різні потоки. Кожен потік представляв би одну частину. (це може бути надзвичайно складним залежно від ваших потреб, але в цьому випадку я думаю, що це дуже просто).

Якщо тепер ви зможете мати ці потоки під вами встановленнями WordPress і синхронізувати їх також із вмістом бази даних тощо ..., тоді ви можете виконати злиття в інструменті CM / версія та потім експортувати їх назад в інше середовище.

Річ у тому, що вам потрібно спершу записати це. Це не технічний злом. Це шаблон за замовчуванням навколо Config Management, тому тут також нічого дивного, але вам потрібно записати його. Ви можете виявити, наприклад, що встановлений плагін вносить зміни в базу даних з деякими даними, які відрізняються в іншому середовищі, тому для цього вам потрібно мати додаткову процедуру.

Технічно майже завжди все можливо перевірити http://www.cmcrossroads.com/forums на предмет сценаріїв, які в десятки чи сотні разів складніші, хоча завжди використовуючи той самий підхід та використовуючи той самий набір шаблонів CM.

коротше: помістіть під нього рівень управління версіями, автоматизуйте злиття та вирішіть конфлікти, а потім імпортуйте у цільове середовище. Придумайте стратегію потоку, яка підходить тут, і запишіть її. Виконайте керування CM підлітковим бітом. Це було б професійним рішенням, інакше встановіть деякий хак-копію db, сценарії тощо ...


2

Я щойно створив публікацію про те, як я синхронізую виробничі дані на нашій постановці, перегляньте мій пост у цьому блозі за адресою: http://blog.wp.weightpoint.se/2012/01/04/synchroising-wordpress-multisite-database -від виробництва-до-постановочної поведінки /

Якщо ви хочете синхронізувати код та інші речі, я б рекомендував створити сховище git або mercurial з відповідним файлом ігнорування.

Якщо ви хочете зробити диференційовані оновлення, щоб уникнути стадійних дій, то я гадаю, що створення сценаріїв міграції - це найбезпечніший і найкращий спосіб.

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