Назад | Перейти на главную страницу

Только структура репликации MySQL

Могу ли я настроить MySQL в качестве подчиненного устройства только копирование изменений структуры? (CREATE / ALTER TABLE и т.д.). На это у меня есть 2 причины:

  1. Несколько разработчиков с ветвями разработки в коде, которые всегда должны работать со «свежей» структурой данных, полученной из «основной» базы данных разработки.
  2. Несколько проектов / клиентов, которые совместно используют (часть) один и тот же код / ​​сценарии (подумайте о «базовом» каталоге с символической ссылкой), но с разными базами данных (по 1 на клиента), структура которых должна обновляться одновременно с изменениями кода в общей части кода, с минимальным временем простоя.

Если это невозможно, каковы другие хорошие способы синхронизации mysql-datastructures без фактических данных между сайтами / базами данных / серверами? И нет, структурные изменения случаются не так уж часто, но при наличии достаточного количества различных баз данных достаточно времени на синхронизацию всех экземпляров, и я хотел бы как ограничить время простоя, так и потратить свое время на более интересные задания;).

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

Ты бы ALTER все таблицы BLACKHOLE и INSERT, UPDATE, и DELETE записи не повлияют на данные, поскольку черная дыра не хранит данные.

Ты можешь skip-innodb и установить default-storage-engine=BLACKHOLE и все созданные таблицы по умолчанию будут BLACKHOLE кроме тех, которые созданы как MyISAM, так как MyISAM не может быть отключен. Вы должны знать об этом при создании таблиц на главном сервере, поскольку вам может потребоваться позже ALTER вернуться к BLACKHOLE на подчиненном репликанте.

Тем не менее, то, что вы описываете, является административной проблемой, а не технической проблемой. Я рекомендую настроить как минимум две базы данных разработки, которые будут обслуживаться командой инфраструктуры.

Первый - это база данных разработки. У разработчиков больше доступа к этой базе данных, и она будет регулярно обновляться очищенными данными.

Вторая база данных будет QA или средой тестирования, к которой разработчики не будут иметь доступа RW. Это обеспечивает правильную постановку.

Обе эти базы данных будут проверены ИТ-специалистом, вносящим производственные изменения в базу данных, и будут включены как часть процесса подготовки к производству, что обеспечивает согласованность схем во всех средах.

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

К сожалению, репликация MySQL не позволяет этого. Что вы можете сделать, так это регулярно запускать mysqldump -d который сбрасывает базу данных и структуру таблицы, но не учитывает данные. Затем вы можете импортировать эту структуру в новую БД.

Из man mysqldump:

--no-data, -d

          Do not write any row information for the table. This is very useful if
          you want to dump only the CREATE TABLE statement for the table.

Мы делаем это там, где сейчас работаю. В рамках любых изменений в БД мы запускаем эту команду, сохраняем ее в файл и помещаем в систему управления версиями. Разработчики просто открывают файл и применяют изменения.

Поскольку вы упомянули символические ссылки, я предполагаю, что экземпляры MySQL или несколько баз данных находятся либо на одном сервере, либо имеют доступ к одним и тем же дискам.

Предполагая это, я бы попытался создать символическую ссылку .frm главного устройства на .frm подчиненного. Таким образом, всякий раз, когда ведущее устройство обновляется структурными изменениями, ведомое устройство обновляется автоматически, но они не будут обмениваться данными. На самом деле я этого не пробовал, но теоретически это должно работать.

«Каждая таблица MyISAM хранится на диске в трех файлах. Файлы имеют имена, начинающиеся с имени таблицы, и расширение, указывающее на тип файла. Файл .frm хранит формат таблицы. Файл данных имеет расширение .MYD (MYData ) расширение. Индексный файл имеет расширение .MYI (MYIndex) ".