Spec-Zone.ru › MySQL 9.2

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

  • Настройка 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
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 9.2 mysqld использует тип запуска процесса Type=notify. (Type=forking использовался в MySQL 5.7.) С помощью Type=notify systemd автоматически настраивает файл сокета и экспортирует путь к переменной окружения NOTIFY_SOCKET.

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

NO_INIT=true

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

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

Примечание

Поскольку systemd имеет возможность управления несколькими экземплярами MySQL на платформах, для которых установлен support 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. Для указания этих опций используйте файл systemd override.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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/using-systemd.html

Spec-Zone.ru

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