Как установить Amazon RDS SQL_MODE с несколькими значениями
MySQL позволяет параметру SQL_MODE иметь несколько значений в файле my.cnf. Как я могу сделать то же самое на Amazon RDS?
ОБНОВЛЕНИЕ: Эта проблема была исправлена ... см. Ниже.
2 ответа
Похоже, Amazon исправил это по состоянию на 24 мая 2016 года.
"Параметру sql_mode теперь можно задать список значений для всех версий MySQL и MariaDB. Список значений должен быть корректным и во всех регионах".
MySQL позволяет параметру SQL_MODE иметь несколько значений в файле my.cnf. Однако Amazon RDS допускает только одно значение, используете ли вы их консоль на основе браузера или инструменты CLI.
Я нашел (возможно, не идеальное) решение проблемы невозможности установить SQL_MODE для нескольких значений. В моей процедуре ниже, я показываю, каковы мои настройки. Вы можете выбрать любые значения, которые вы считаете подходящими для вашей среды.
1) В вашей группе параметров установите SQL_MODE = TRADITIONAL (или какое из значений всегда является вашим наивысшим приоритетом)
2) В вашей группе параметров установите для init_connect: SET SESSION sql_mode = 'TRADITIONAL,IGNORE_SPACE,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY'
Теперь, когда клиент входит в базу данных, его сеанс SQL_MODE должен быть установлен на все значения, передаваемые строкой init_connect. В моем случае это равняется: IGNORE_SPACE, ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NOUTION_OUTION_OUTION_OURITION
Предостережение: редактирование значения init_connect после его установки включало в себя вырезание и вставку. Однако я обнаружил, что пытаться удалить значение init_connect после его установки - это большая проблема, поэтому будьте осторожны при работе с ним. Хлопот? Чтобы удалить значение init_connect после установки, потребовалось, чтобы я создал новую группу параметров с нуля, установите все значения, кроме init_connect, в исходную группу параметров, удалите исходную группу параметров, затем переименуйте новую группу со старым именем. Это было верно как для Firefox, так и для Chrome. Я также не мог удалить значение с помощью инструмента CLI (aws rds modify-db-parameter-group).
Хотя это и не является частью этого поста, если кто-нибудь ответит, как удалить / сбросить / обнулить init_connect без проблем, описанных выше, это было бы здорово.
ОБНОВЛЕНИЕ 1:
Не берите в голову. Я обнаружил, что установка init_connect (в RDS) НЕ выдержит перезагрузку базы данных. Поэтому решение, которое я предложил выше, не работает.
Кроме того, поскольку нельзя удалить (удалить) параметр init_connect через консоль (почему бы и нет?), Его можно удалить с помощью команды CLI aws rds reset-db-parameter-group, а не перестраивать всю группу параметров, как я описывал ранее.,
Я ОЧЕНЬ разочарован тем, что Amazon RDS:
- Не допускает множественных значений SQL_MODE.
- Не позволяет нам удалить настройку init_connect через консоль.
ОБНОВЛЕНИЕ 2:
Согласно ответу Росса Скривнера, я протестировал установку нескольких значений SQL_MODE через консоль AWS. Я использовал значения 'TRADITIONAL,IGNORE_SPACE,ONLY_FULL_GROUP_BY' (без пробелов). Затем я дважды перезагрузил сервер, и все, казалось, прошло.
Спасибо Amazon за исправление, и спасибо Россу Скривенеру за указание на изменения в AWS.