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