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

Должен ли я иметь один экземпляр MySQL для всех наших приложений или по одному экземпляру для каждого?

Мы - небольшой стартап, и мне нужно установить несколько приложений, почти все из которых требуют базы данных.

Я стою перед выбором: настроить один экземпляр MySQL с одной базой данных для каждого из наших приложений или настроить отдельный экземпляр MySQL для каждого приложения.

Какова общепринятая практика в этой ситуации? Одна база данных, чтобы обслуживать их всех, или разделяй и властвуй?

Не зная ничего другого, проще всегда лучше. Один экземпляр.

Согласен с другими - один экземпляр mysql, но:

  • отдельные базы данных для каждого приложения
  • отдельный пользователь / пароль для каждого приложения

Это значительно упростит перенос в дальнейшем. Однако используйте innodb, а не c-isam в качестве механизма хранения - последний (IIRC) по-прежнему обрабатывает только один запрос за раз.

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

Один экземпляр MySQL, несколько баз данных - лучшая практика.

Я не могу придумать много сценариев, в которых идеальной ситуацией было бы запуск нескольких экземпляров MySQL с одной базой данных на каждый экземпляр. Это кажется глупым.

Один раз лучше, потому что:

  • вы можете использовать все доступные ресурсы (оперативную память и дисковое пространство)
  • mysql может при необходимости назначать ресурсы
  • кеширование сможет использовать макс. объем памяти (без устаревших кешей)
  • единое место для управления
  • легче поддерживать

Один экземпляр на машине с высокими техническими характеристиками, быстрый дисковый массив (возможно, SSD, сеть LACP) и создание отдельных БД и логинов для каждого приложения.

Это типичное развертывание для большинства систем баз данных, особенно для SQL. Однако вы должны учитывать доступность при централизации сервера базы данных. Поэтому в большинстве производственных сред вы увидите кластер SQL, состоящий из пары серверов, реплицирующих друг друга или совместно использующих некоторое хранилище SAN.

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

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

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

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

Кроме того, вы можете использовать только одну версию mysqld. Может быть, для одной из ваших баз данных нужна другая версия.

Я хотел бы использовать более одного экземпляра mysql. По мере роста проектов для разных баз данных могут потребоваться разные конфигурации. Конечно, вы можете перейти на новые экземпляры в любое время, но наличие более одного экземпляра может иметь следующие преимущества

  1. Сделать резервную копию / восстановить проще и быстрее
  2. Репликация работает на экземпляре, поэтому было бы проще реплицировать или кластеризовать базы данных с большим количеством операций чтения / записи.
  3. Если вам когда-либо требовалась контейнеризация баз данных (с использованием докеров или около того), гораздо проще поместить каждую базу данных в другой контейнер.

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