2.5.9 Управление сервером MySQL с помощью systemd
Если вы устанавливаете MySQL с помощью пакета RPM или Debian на следующих платформах Linux, запуск и остановка сервера управляются системой systemd:
-
Платформы пакетов RPM:
Варианты Enterprise Linux версии 7 и выше
SUSE Linux Enterprise Server 12 и выше
Fedora 29 и выше
-
Платформы семейства Debian:
Платформы Debian
Платформы Ubuntu
Если вы устанавливаете MySQL из универсального бинарного распределения на платформе, использующей systemd, вы можете вручную настроить поддержку systemd для MySQL, следуя инструкциям, предоставленным в разделе настройки после установки руководства по защищенному развертыванию MySQL 8.4.
Если вы устанавливаете MySQL из исходного распределения на платформе, использующей systemd, получите поддержку systemd для MySQL, настроив дистрибутив с помощью параметра -DWITH_SYSTEMD=1 CMake. См. Раздел 2.8.7, «Параметры настройки MySQL из исходного кода».
В следующем обсуждении рассматриваются эти темы:
На платформах, для которых установлена поддержка systemd для MySQL, скрипты, такие как mysqld_safe и скрипт инициализации System V, не нужны и не устанавливаются. Например, mysqld_safe может обрабатывать перезапуск сервера, но systemd предоставляет ту же возможность и делает это так, как это обычно делается при управлении другими службами, а не с помощью специальной программы.
Одним из последствий отказа от использования mysqld_safe на платформах, использующих systemd для управления сервером, является то, что использование разделов [mysqld_safe] или [safe_mysqld] в файлах параметров не поддерживается и может привести к неожиданному поведению.
Поскольку systemd может управлять несколькими экземплярами MySQL на платформах, для которых установлена поддержка systemd для MySQL, mysqld_multi и mysqld_multi.server не нужны и не устанавливаются.
Обзор systemd
systemd обеспечивает автоматический запуск и остановку сервера MySQL. Он также позволяет вручную управлять сервером с помощью команды systemctl. Например:
$> systemctl {start|stop|restart|status} mysqld
В качестве альтернативы используйте команду service (с аргументами в обратном порядке), которая совместима с системами System V:
$> service mysqld {start|stop|restart|status}
Для команды systemctl (и альтернативной команды service), если имя службы MySQL не является mysqld, используйте соответствующее имя. Например, используйте mysql вместо mysqld на системах на основе Debian и SLES.
Поддержка systemd включает следующие файлы:
mysqld.service(платформы RPM),mysql.service(платформы Debian): файл конфигурации службы systemd, содержащий подробности о службе MySQL.mysqld@.service(платформы RPM),mysql@.service(платформы Debian): подобноmysqld.serviceилиmysql.service, но используется для управления несколькими экземплярами MySQL.mysqld.tmpfiles.d: Файл, содержащий информацию для поддержки функцииtmpfiles. Этот файл установлен под именемmysql.conf.mysqld_pre_systemd(платформы RPM),mysql-system-start(платформы Debian): скрипт поддержки для файла единицы. Этот скрипт помогает в создании файла журнала ошибок только в том случае, если расположение журнала соответствует шаблону (/var/log/mysql*.logдля платформ RPM,/var/log/mysql/*.logдля платформ Debian). В других случаях каталог журнала ошибок должен быть доступен для записи или журнал ошибок должен быть доступен и доступен для записи для пользователя, запускающего процесс mysqld.
Настройка systemd для MySQL
Для добавления или изменения параметров systemd для MySQL доступны следующие методы:
Использование локального файла конфигурации systemd.
Настройка systemd для установки переменных среды для процесса сервера MySQL.
Установка переменной systemd
MYSQLD_OPTS.
Для использования локального файла конфигурации systemd создайте директорию /etc/systemd/system/mysqld.service.d, если она не существует. В этой директории создайте файл, содержащий секцию [Service] с желаемыми параметрами. Например:
[Service]
LimitNOFILE=max_open_files
Nice=nice_level
LimitCore=core_file_limit
Environment="LD_PRELOAD=/path/to/malloc/library"
Environment="TZ=time_zone_setting"
В этом обсуждении используется имя файла override.conf. Более новые версии systemd поддерживают следующую команду, которая открывает редактор и позволяет изменить файл:
systemctl edit mysqld # RPM platforms
systemctl edit mysql # Debian platforms
Всякий раз, когда вы создаете или изменяете override.conf, перезагрузите конфигурацию systemd, а затем сообщите systemd о необходимости перезапуска службы MySQL:
systemctl daemon-reload
systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms
В systemd метод override.conf настройки должен использоваться для определенных параметров вместо настроек в группе [mysqld], [mysqld_safe] или [safe_mysqld] в файле опций MySQL:
Для некоторых параметров необходимо использовать
override.conf, поскольку systemd само должно знать их значения, и оно не может читать файлы опций MySQL для их получения.Параметры, которые задают значения, которые в противном случае можно установить только с помощью опций, известных команде mysqld_safe, должны быть указаны с помощью systemd, так как нет соответствующего параметра mysqld.
Дополнительную информацию о использовании systemd вместо mysqld_safe см. в разделе Миграция от mysqld_safe к systemd.
Вы можете установить следующие параметры в override.conf:
Для установки количества доступных дескрипторов файлов для сервера MySQL используйте
LimitNOFILEвoverride.confвместо переменной системыopen_files_limitдля mysqld или опции--open-files-limitдля mysqld_safe.Для установки максимального размера файла ядра используйте
LimitCoreвoverride.confвместо опции--core-file-sizeдля mysqld_safe.Для установки приоритета планирования для сервера MySQL используйте
Niceвoverride.confвместо опции--niceдля mysqld_safe.
Некоторые параметры MySQL настраиваются с помощью переменных среды:
-
LD_PRELOAD: Установите эту переменную, если сервер MySQL должен использовать определённую библиотеку выделения памяти. -
NOTIFY_SOCKET: Эта переменная среды указывает сокет, который mysqld использует для уведомления о завершении запуска и изменении статуса службы systemd. Она устанавливается systemd при запуске службы mysqld. Служба mysqld считывает значение переменной и записывает в указанное место.В MySQL 8.4, mysqld использует тип запуска процесса
Type=notify. (Type=forkingиспользовался в MySQL 5.7.) С помощьюType=notifysystemd автоматически настраивает файл сокета и экспортирует путь к переменной средыNOTIFY_SOCKET. -
TZ: Установите эту переменную для указания часового пояса по умолчанию для сервера.
Существует несколько способов указать значения переменных среды для использования процессом сервера MySQL, управляемым systemd:
Используйте строки
Environmentв файлеoverride.conf. Синтаксис см. в примере предыдущего обсуждения, где описывается использование этого файла.-
Укажите значения в файле
/etc/sysconfig/mysql(создайте файл, если он не существует). Присвойте значения, используя следующий синтаксис:LD_PRELOAD=
/path/to/malloc/libraryTZ=time_zone_settingПосле изменения
/etc/sysconfig/mysqlперезапустите сервер, чтобы изменения вступили в силу:systemctl restart mysqld # RPM platforms systemctl restart mysql # Debian platforms
Для указания опций для mysqld без непосредственного изменения файлов конфигурации systemd, установите или снимите переменную systemd MYSQLD_OPTS. Например:
systemctl set-environment MYSQLD_OPTS="--general_log=1"
systemctl unset-environment MYSQLD_OPTS
MYSQLD_OPTS также можно установить в файле /etc/sysconfig/mysql.
После изменения среды systemd перезапустите сервер, чтобы изменения вступили в силу:
systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms
На платформах, использующих systemd, директория данных инициализируется, если она пуста, при запуске сервера. Это может быть проблемой, если директория данных — это удаленный монтаж, который временно исчез: точкой монтирования будет казаться пустая директория данных, которая затем будет инициализирована как новая директория данных. Чтобы подавить это поведение автоматической инициализации, укажите следующую строку в файле /etc/sysconfig/mysql (создайте файл, если он не существует):
NO_INIT=true
Настройка нескольких экземпляров MySQL с помощью systemd
В этом разделе описывается как настроить systemd для нескольких экземпляров MySQL.
Так как systemd имеет возможность управления несколькими экземплярами MySQL на платформах, для которых установлена поддержка systemd, mysqld_multi и mysqld_multi.server не нужны и не устанавливаются.
Для использования многоэкземплярной возможности измените файл опций my.cnf, чтобы включить конфигурацию ключевых параметров для каждого экземпляра. Эти расположения файлов типичны:
/etc/my.cnfили/etc/mysql/my.cnf(платформы RPM)/etc/mysql/mysql.conf.d/mysqld.cnf(платформы Debian)
Например, для управления двумя экземплярами с именами replica01 и replica02, добавьте что-то подобное в файл опций:
Плаформы RPM:
[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysqld-replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysqld-replica02.log
Платформы Debian:
[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysql/replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysql/replica02.log
Имена реплик здесь используют @ в качестве разделителя, так как это единственный разделитель, поддерживаемый systemd.
Затем экземпляры управляются обычными командами systemd, например:
systemctl start mysqld@replica01
systemctl start mysqld@replica02
Для включения экземпляров при загрузке сделайте следующее:
systemctl enable mysqld@replica01
systemctl enable mysqld@replica02
Поддержка подстановочных знаков также поддерживается. Например, эта команда отображает статус всех экземпляров реплик:
systemctl status 'mysqld@replica*'
Для управления несколькими экземплярами MySQL на одном компьютере systemd автоматически использует другой файл единицы:
mysqld@.serviceвместоmysqld.service(платформы RPM)mysql@.serviceвместоmysql.service(платформы Debian)
В файле единиц %I и %i ссылаются на параметр, переданный после маркера @, и используются для управления конкретным экземпляром. Для команды, такой как эта:
systemctl start mysqld@replica01
systemd запускает сервер, используя команду, такую как эта:
mysqld --defaults-group-suffix=@%I ...
В результате группы параметров [server], [mysqld] и [mysqld@replica01] считываются и используются для этого экземпляра службы.
На платформах Debian AppArmor предотвращает чтение или запись сервером /var/lib/mysql-replica* или чем-либо кроме стандартных расположений. Для решения этой проблемы вы должны настроить или отключить профиль в /etc/apparmor.d/usr.sbin.mysqld.
На платформах Debian скрипты пакетирования для удаления MySQL в настоящее время не могут обрабатывать экземпляры mysqld@. Перед удалением или обновлением пакета необходимо вручную остановить все дополнительные экземпляры.
Миграция с mysqld_safe на systemd
Поскольку mysqld_safe не установлен на платформах, использующих systemd для управления MySQL, опции, ранее указанные для этой программы (например, в группе опций [mysqld_safe] или [safe_mysqld]), необходимо указать другим способом:
-
Некоторые опции mysqld_safe также поддерживаются mysqld и могут быть перемещены из группы опций
[mysqld_safe]или[safe_mysqld]в группу[mysqld]. Это не относится к--pid-file,--open-files-limitили--nice. Для указания этих опций используйте файл systemdoverride.conf, описанный ранее.ПримечаниеНа платформах systemd использование групп опций
[mysqld_safe]и[safe_mysqld]не поддерживается и может привести к неожиданному поведению. Для некоторых опций mysqld_safe существуют альтернативные процедуры для mysqld. Например, опция mysqld_safe для включения журналов
syslog— это--syslog, которая устарела. Для записи вывода журнала ошибок в системный журнал используйте инструкции в разделе 7.4.2.8, «Журналирование ошибок в системный журнал».Опции mysqld_safe, которые не поддерживаются mysqld, можно указать в
override.confили переменных среды. Например, при использовании mysqld_safe, если сервер должен использовать определённую библиотеку выделения памяти, это указывается с помощью опции--malloc-lib. Для установок, управляющих сервером с помощью systemd, вместо этого следует установить переменную средыLD_PRELOAD, как описано ранее.
© 2025 Oracle
Licensed under the GPLv2 License.