Глобальные переменные MySQL и их задание через SET GLOBAL


Глобальные переменные MySQL определяются в файле /etc/my.cnf или в консоли сервера баз данных командой set global. В последнем случае изменения применяются сразу и  перезапуск сервиса не требуется.



Глобальные переменные MySQL на примере


Рассматриваем веб-сервер с сайтом и базой данных MySQL.

При обращении к сайтам часто можно увидеть ошибку ERROR 1040 (08004): Too many connections.

В MySQL есть переменная, задающая максимальное количество подключений — max_connections. Ошибка говорит о том, что этот лимит достигнут.



Такое бывает когда код размещающегося на сервере сайта отработал и сгенерировал очень большое количество запросов к базе.

Когда возникла ошибка дальнейшая обработка запросов становится невозможна.



Если код сайта работает с MySQL не от имени пользователя root — лимит можно поменять подключившись к MySQL с реквизитами пользователя root.


Смена лимита выполняется таким запросом:

SET GLOBAL max_connections = 600;



Результат выполнения команды и новое значение параметра показаны на скриншоте:

Глобальные переменные MySQL и SET GLOBAL



Сайт всегда должен использовать реквизиты пользователя, отличного от root. Чтобы выполнить команду нужно подключиться к MySQL, даже если для какого-то пользователя подключение невозможно, его может выполнить root.



Если подключиться не может root — требуется перезапускать сервер баз данных.

systemctl restart mysql

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

Перезапуск (завершение процесса) может повлечь повреждение таблиц и частичную потерю данных.




Таким образом через SET GLOBAL можно задавать значение большинства параметров MySQL.



Глобальные переменные MySQL позволяют вносить изменения для всего сервера без перезапуска службы



На практике если нужно изменить значение какой-то переменной лучше использовать SET GLOBAL, то же значение при этом установить в конфигурационном файле.



SET GLOBAL устанавливает значение параметров для сервера до ближайшего перезапуска службы или перезагрузки сервера .

Когда перезапуск произойдет конфигурация в /etc/my.cnf считается и состояние MySQL вернется к тому, что было до рестарта.



При использовании SET GLOBAL регист не имеет значения. Команды можно выполнять как в верхнем, так и в нижнем регистре.


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

Сказать спасибо