WL#7895: Add systemd support to server
Affects: Parser-5.7
—
Status: Complete
Background
The major Linux distributions are moving from legacy SystemV init or
upstart init to new, more powerful systemd init system[1].
systemd has a lot of new features for daemons such as mysqld, among
the most important are
- handling of user and group running the daemon
- resource control (max open files for example)
- and automatic restarts in case of failure
However, to let MySQL server be good citizen in this new enviroments
some changes are required.
This WL tries to list those requirements.
Benefits
References
[1]: http://www.freedesktop.org/wiki/Software/systemd/
[2]: http://www.freedesktop.org/software/systemd/man/systemd.service.html
[3]: http://www.freedesktop.org/software/systemd/man/systemd-tmpfiles.html
[4]: http://www.freedesktop.org/software/systemd/man/daemon.html
Details
MySQL gets a modern init system for Linux systems and native SysV daemon
option on other supported platforms.
Testing
Exit status, start status
Package verification
Failure/restart tests
Requirements
F1: Create systemd specific files
a) mysqld.service[2]
systemd service unit configuration,
with details about the mysqld service.
b) mysqld.tmpfiles[3]
file to support the tmpfiles feature
c) mysql-systemd-start
support script for the unit file
Repo project can provide contents of files and locations.
F2: Add cmake option.
Add new -DWITH_SYSTEMD=on|off (off by default)
Install F1 when enabled
F3: Modification of initial startup of server.
systemd expect server to do standard SysV daemon init, or
init of "New-Style Daemons". We should implement standard
SysV init as then we can reuse the feature outside systemd context
and be the default way server starts on all platforms (except Windows).
See [4] for detailed description of how this should be implemented.
An option to use current non daemon mode should be present.
F4: Clean up of exit codes.
systemd is monitoring daemons started and restarts them if they stops
with exit code > 0. mysqld must therefore return exit 0 on normal
shutdown and basically return sane exit code everywhere.
F5: Clarify malloc libs status.
To use alternative malloc libs mysqld_safe has an --malloc-lib
option (implemented by a LD_PRELOAD hack). With systemd support
and mysqld_safe out of the picture there is no way to inject
other malloc libs.
Solutions:
a) build with jemalloc/tcmalloc statically by default
b) add LD_PRELOAD of malloc libs mechanism in systemd service file
c) only use system malloc on systemd platforms
F6: Disable mysqld_safe when running under systemd.
When F4 and F5 are done, we can remove mysqld_safe and leave it to
systemd to restart server in case of failure.
F7: Improve packages, enable systemd.
Copyright (c) 2000, 2025, Oracle Corporation and/or its affiliates. All rights reserved.