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


19

Перед тим було задано питання про те, як синхронізувати файли, а також базу даних між двома установками Wordpress.

Що стосується рівня бази даних, відповідь, як правило, полягає в тому, щоб скинути одну базу даних і вставити її на інший сервер. Проблема з цим полягає в тому, що ви втрачаєте будь-які зміни, які потенційно були внесені на сервері prod. Наприклад, показники використання, коментарі тощо ...

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

Хтось пробував це, розглядаючи це, чи має якісь ідеї чи коментарі?


1
Я розглядав це, так, але не досяг багато. Якщо ви можете вказати на підтвердження концепції на іншій платформі CMS, я впевнений, що ми могли б змінити її для WordPress.
EAMann

Як щодо реплікації?
ковшенін

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

Відповіді:


11

Реальність така, що ми хочемо, це таке: http://www.liquibase.org/

Liquibase - це відкритий код (ліцензований Apache 2.0), незалежна від бази даних бібліотека для відстеження, управління та застосування змін до бази даних. Він побудований на простому приміщенні: всі зміни бази даних зберігаються в читаному, але відслідковуваному вигляді, і перевіряються у контролі джерел.

Однак наш процес розробки цього не підтримує. Зазвичай ми не змінюємо базу даних за допомогою дискретних сценаріїв, які ми пишемо самі, ми використовуємо плагіни, які ми активуємо. Ми не пишемо сценарії DML для зміни даних пошуку, які потім перевіряємо у контролі вихідного коду, ми використовуємо інтерфейс користувача на сторінці адміністратора і тому не маємо вихідного коду для подальшого використання при реплікації цієї зміни під час міграції.

Однак ми можемо наслідувати деякі з них, використовуючи деякі інструменти, перелічені на цій сторінці:

/programming//q/225772/149060

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

MySQLDiff (обговорюється в питанні StackOverflow) відрізняється від схеми, і автор рекомендує mysql_coldiff для даних, що відрізняються від таблиць - обидва реалізовані в perl, якщо інструменти java (liquidbase) занадто важкі для ваших серверів - хоча приносять обидві бази даних локальні і запуск інструмента на вашому ПК вирішує цю проблему ...

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

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

Якщо ми подивимось на код інструментального гака @bueltge викликає плагін для натхнення: https://gist.github.com/1000143 (спасибі Рона Ренника через G + за те, що він вказує мені в бік SAVEQUERIES та гачок відключення, приведи мене до пошуку)

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

Наприклад:

Назва захоплення: Активувати та налаштувати плагін XYZ

Capture State Toggle - увімкнено

... встановити та налаштувати плагін XYZ

Захопити стан переключення - вимкнено

Експорт сценарію міграції для: Активувати та налаштувати плагін XYZ

Натисніть кнопку "Експорт" - щоб створити спливаюче текстове поле з відфільтрованим захопленим SQL - в ідеалі попередньо відформатованим як сценарій оболонки з викликом командного рядка до mysql. Скопіюйте та вставте його у папку міграційного коду та додайте до сховища вихідного коду.

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

Що ще краще, у вас буде сценарій (або серія такого ж), яку ви можете тестувати. Зображення має повторювані, тестовані сценарії міграції !!

Я вже закоханий.

Будь-хто інший?


2
Приємний запис. Я витрачав багато часу на цю проблему, тому що в мене є клієнти, які шукають нашої допомоги. Це дійсно важка проблема, але ми вирішили, що опускатися до рівня SQL - це, мабуть, занадто багато рішення "кипіти океан", тобто шанси на 100% його роботи запрацюють. Я думаю, що рішення полягає у використанні підходу "розділити та перемогти" з явним кодом, який розуміє структуру WordPress, і який забезпечує гачки для всього іншого. Я сподіваюся, що ми зможемо публічно представити життєздатне рішення в якийсь момент майбутнього.
MikeSchinkel

Отже .... хто хоче це зробити?
Поцілунок Дейва

хто шукає, здається, ця сама ідея доступна як плагін: wordpress.org/plugins/query-recorder
майк

3

База даних синхронізації WordPress плагін робить велику роботу по синхронізації даних між двома серверами.

За замовчуванням він перезаписує ВСІ цільові дані, однак я лише впровадив деякі вдосконалення плагіна, які дозволяють синхронізувати лише певні таблиці баз даних. Це допоможе вам зберегти коментарі, користувачів та інші подібні дані, які ви не хочете перезаписувати. Це дає вам деталізацію, яка вам потрібна?

Я ще не опублікував свої зміни для публіки, але якщо вас зацікавила копія, надішліть мені електронний лист на simon-at-yump.com.au. Якщо хтось вважає це корисним або має додаткові запити щодо функцій, дайте мені знати, і я побачу, що я можу зробити.


ОНОВЛЕННЯ: Я також щойно знайшов плагін WP-Sync-DB , який є роздрібним комерційним плагіном WP-Migrate-DB-Pro . Це дуже схожа річ, хоча, ймовірно, має більше польської, ніж синхронізація баз даних .


0

Існує відносно нова комерційна послуга спеціально для цього завдання. Це називається RAMP:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
Є обмеження для цієї послуги, які не відповідають моєму випадку використання:
marfarma

2
Мій випадок використання - додавання функціональності, тоді як виробництво додає вміст. Цитата: "Наразі такі елементи не підтримуються: Налаштування (параметри ядра та плагіна, якщо вони не ввімкнули RAMP)" 99,99% тем і параметрів плагінів та налаштувань не зміняться. Без зміни коду на виробництві користувацькі типи публікацій не мігруватимуть. Забудьте про додавання спеціальних таблиць та їх даних.
marfarma

1
Цей продукт має дійсний випадок використання - інсценізує вміст, а потім висуває його наживо. На жаль, це не проблема, з якою я переживаю. Повертаючись до ОП, незрозуміло, з якою справою він має справу - тож це може бути ідеальним рішенням для їхнього магазину.
marfarma
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.