Spec-Zone.ru › MySQL 5.7

2.5.10 Управление сервером MySQL с помощью systemd

Если вы установили MySQL с помощью пакета RPM или Debian на следующих платформах Linux, запуск и остановка сервера управляются systemd:

  • Платформы пакетов RPM:

    • Варианты Enterprise Linux версии 7 и выше

    • SUSE Linux Enterprise Server 12 и выше

  • Платформы семейства Debian:

    • Платформы Debian

    • Платформы Ubuntu

Если вы установили MySQL из универсального двоичного дистрибутива на платформе, использующей systemd, вы можете вручную настроить поддержку systemd для MySQL, следуя инструкциям, предоставленным в разделе настройки после установки в Руководстве по защищённому развертыванию MySQL 5.7.

Если вы установили MySQL из исходного дистрибутива на платформе, использующей systemd, получите поддержку systemd для MySQL, настроив дистрибутив с помощью параметра -DWITH_SYSTEMD=1 CMake. См. Раздел 2.8.7, «Параметры конфигурации исходного кода MySQL».

В следующем обсуждении рассматриваются эти темы:

  • Обзор systemd

  • Настройка systemd для MySQL

  • Настройка нескольких экземпляров MySQL с помощью systemd

  • Миграция с mysqld_safe на systemd

Примечание

На платформах, на которых установлена поддержка 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
PIDFile=/path/to/pid/file
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 5.7.10: Используйте override.conf и измените как PIDFile, так и ExecStart, чтобы указать имя пути файла PID. Любые настройки файла процесса в файлах опций MySQL игнорируются. Для изменения ExecStart, его сначала нужно очистить. Например:

      [Service]
      PIDFile=/var/run/mysqld/mysqld-custom.pid
      ExecStart=
      ExecStart=/usr/sbin/mysqld --pid-file=/var/run/mysqld/mysqld-custom.pid $MYSQLD_OPTS
      
    • До MySQL 5.7.10: Используйте PIDFile в override.conf вместо опции --pid-file для mysqld или mysqld_safe. systemd должен знать расположение файла PID, чтобы иметь возможность перезапускать или останавливать сервер. Если значение файла PID указано в файле опций MySQL, оно должно совпадать со значением PIDFile, иначе запуск MySQL может завершиться ошибкой.

  • Для установки количества доступных дескрипторов файлов для MySQL-сервера, используйте LimitNOFILE в override.conf вместо системной переменной open_files_limit для mysqld или опции --open-files-limit для mysqld_safe.

  • Для установки максимального размера файла core, используйте LimitCore в override.conf вместо опции --core-file-size для mysqld_safe.

  • Для установки приоритета планирования для MySQL-сервера, используйте Nice в override.conf вместо опции --nice для mysqld_safe.

Некоторые параметры MySQL настраиваются с помощью переменных среды:

  • LD_PRELOAD: Установите эту переменную, если MySQL-сервер должен использовать определённую библиотеку для выделения памяти.

  • TZ: Установите эту переменную для указания часового пояса по умолчанию для сервера.

Существует несколько способов указать значения переменных среды для использования процессом MySQL-сервера, управляемым systemd:

  • Используйте строки Environment в файле override.conf. Синтаксис см. в примере в предыдущем обсуждении, описывающем использование этого файла.

  • Укажите значения в файле /etc/sysconfig/mysql (создайте файл, если он не существует). Присвойте значения с помощью следующего синтаксиса:

    LD_PRELOAD=/path/to/malloc/library
    TZ=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, каталог данных инициализируется, если он пуст, при запуске сервера. Это может быть проблемой, если каталог данных является удалённым монтированием, которое временно пропало: точка монтирования будет выглядеть как пустой каталог данных, который затем будет инициализирован как новый каталог данных. Начиная с MySQL 5.7.20, чтобы подавить это поведение автоматической инициализации, укажите следующую строку в файле /etc/sysconfig/mysql (создайте файл, если он не существует):

NO_INIT=true

Настройка нескольких экземпляров MySQL с помощью systemd

В этом разделе описывается, как настроить systemd для нескольких экземпляров MySQL.

Примечание

Поскольку systemd имеет возможность управления несколькими экземплярами MySQL на платформах, для которых установлена поддержка systemd, mysqld_multi и mysqld_multi.server являются излишними и не устанавливаются. Это верно для MySQL 5.7.13 на платформах RPM и 5.7.19 на платформах Debian.

Для использования возможности управления несколькими экземплярами измените файл конфигурации 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. Для указания этих параметров используйте файл systemd override.conf, описанный ранее.

    Примечание

    На платформах systemd использование групп параметров [mysqld_safe] и [safe_mysqld] не поддерживается и может привести к неожиданному поведению.

  • Для некоторых параметров mysqld_safe существуют аналогичные параметры mysqld. Например, параметр mysqld_safe для включения ведения журнала syslog — это --syslog, который устарел. Для mysqld включите системную переменную log_syslog вместо этого. Подробности см. в разделе 5.4.2, «Журнал ошибок».

  • Параметры mysqld_safe, которые не понимаются mysqld, могут быть указаны в override.conf или переменных среды. Например, с mysqld_safe, если сервер должен использовать определённую библиотеку выделения памяти, это указывается с помощью параметра --malloc-lib. Для установок, которые управляют сервером с помощью systemd, вместо этого нужно установить переменную среды LD_PRELOAD, как описано ранее.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/using-systemd.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API