Для WordPress и управляемой базы данных DigitalOcean SQL Требуется проблема с первичным ключом

#mysql #wordpress #primary-key #digital-ocean #wordpress-hook

Вопрос:

Контекст: Не так много знаний в области разработки WP, но в целом опытный разработчик PHP.

Итак, как все могут знать (или нет, как и я), управляемая система баз данных DigitalOcean настроена на наличие требуемого первичного ключа (не изменяемого глобально). Хотя я понимаю, что так лучше, иногда при установке существующего плагина на веб-сайт WordPress плагину приходится создавать таблицы, в которых может быть или не быть первичного ключа.

У меня есть список таких плагинов, которые я вышлю улучшение запросу где это возможно, но в качестве обходного пути я хотел бы решить это с помощью крючка и/или «обязательно используйте плагин» система WordPress, чтобы позвонить SET SESSION sql_require_primary_key = OFF; перед каждым создать таблицу заявление (или каждый оператор SQL в общем, если нет никакого способа, чтобы сосредоточиться только на создание таблицы заявления).

  1. Является ли это «хорошим» и выполнимым обходным путем ?
  2. Как я могу этого достичь (какой крючок я должен вызывать) ?

Комментарии:

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

2. @MarkB спасибо вам за это замечание. Я понятия не имел, что это было причиной. Таким образом, единственное решение, которое у меня есть, — это, по-видимому, перенести свои базы данных, поскольку я не контролирую некоторые плагины, которые используют мои клиенты, и создание баз данных вручную для каждого плагина нереально, поскольку каждое обновление потенциально может создать новый… Это БОЛЬШОЙ облом…

3. @MarkB; также: да. Я это проверил. Потому что, когда я создаю таблицы вручную (и отключаю параметр sql_require_primary_key с помощью редактора SQL), таблица успешно создается даже без первичного ключа.

4. Да, я тоже очень расстроен этим. В настоящее время я перемещаю что-то из DO в Lightsail из-за этого, поскольку у Lightsail нет такого требования к индексу.

5. @MarkB, если вы не возражаете, я спрошу: означает ли это, что репликация будет невозможна для таких баз данных, даже если я перейду на AWS или отдельный кластер SQL droplet?

Ответ №1:

Возникли те же проблемы с wp-cerber прямо сейчас и получили такой ответ от Digital Ocean:

В настоящее время у нас включена переменная sql_require_primary_key, позволяющая пользователям создавать первичный ключ в таблицах, чтобы избежать проблем с репликацией, репликацией узлов и т. Д. Это работало в прошлом и не применялось, но опыт, время и информация, которую мы собрали из частых проблем, например. время, необходимое для создания нового узла для службы из резервной копии с большими таблицами.

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

Если вы решите действовать без первичного ключа, вы можете использовать два варианта:

  1. Мы можем отключить основное требование с нашей стороны
  2. Вы можете использовать НАБОР СЕАНСОВ sql_require_primary_key = 0;

Примечание № 2, однако, предназначено для одного сеанса. Как только вы выйдете из системы, вам нужно будет запустить это снова.

Приведенный ниже URL-адрес содержит дополнительную информацию https://www.digitalocean.com/docs/databases/mysql/how-to/create-primary-keys/#how-digitalocean-uses-primary-keys

Комментарии:

1. Ты это починил? Я получил от них такой же ответ.

2. К сожалению, нет.