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 для 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/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, каталог данных инициализируется, если он пуст, при запуске сервера. Это может быть проблемой, если каталог данных является удалённым монтированием, которое временно пропало: точка монтирования будет выглядеть как пустой каталог данных, который затем будет инициализирован как новый каталог данных. Начиная с 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. Для указания этих параметров используйте файл systemdoverride.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.