From 6346d1de2fdaa8a8359082871eac49402cb0e472 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Mon, 28 Sep 2015 15:08:09 +0400 Subject: MDEV-427/MDEV-5713 Add systemd script with notify functionality After review/QA fixes. --- cmake/install_layout.cmake | 6 +- cmake/systemd.cmake | 20 ++++-- debian/control | 1 - debian/mariadb-server-10.1.files.in | 2 +- debian/mariadb-server-10.1.postinst | 6 ++ debian/rules | 12 +--- include/my_systemd.h | 27 ++++++-- scripts/CMakeLists.txt | 2 +- scripts/mariadb-service-convert | 18 ++---- scripts/mysqld_safe.sh | 17 +++-- sql/mysqld.cc | 9 ++- storage/innobase/log/log0recv.cc | 18 +++--- storage/xtradb/log/log0recv.cc | 20 +++--- support-files/CMakeLists.txt | 40 ++++++++---- support-files/mariadb-bootstrap.conf | 16 ----- support-files/mariadb.service | 120 ---------------------------------- support-files/mariadb.service.in | 122 +++++++++++++++++++++++++++++++++++ support-files/mariadb@.service.in | 26 ++++---- support-files/mysql.server.sh | 5 ++ support-files/rpm/server-postin.sh | 20 ++++-- support-files/wsrep-new-cluster.conf | 16 +++++ 21 files changed, 287 insertions(+), 236 deletions(-) delete mode 100644 support-files/mariadb-bootstrap.conf delete mode 100644 support-files/mariadb.service create mode 100644 support-files/mariadb.service.in create mode 100644 support-files/wsrep-new-cluster.conf diff --git a/cmake/install_layout.cmake b/cmake/install_layout.cmake index ebf3852182c..7c4639fe76c 100644 --- a/cmake/install_layout.cmake +++ b/cmake/install_layout.cmake @@ -161,6 +161,7 @@ SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql") SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql") SET(INSTALL_UNIX_ADDRDIR_RPM "${INSTALL_MYSQLDATADIR_RPM}/mysql.sock") +SET(INSTALL_SYSTEMD_UNITDIR_RPM "/usr/lib/systemd/system") # # DEB layout @@ -189,6 +190,8 @@ SET(INSTALL_SUPPORTFILESDIR_DEB "share/mysql") SET(INSTALL_MYSQLDATADIR_DEB "/var/lib/mysql") SET(INSTALL_UNIX_ADDRDIR_DEB "/var/run/mysqld/mysqld.sock") +SET(INSTALL_SYSTEMD_UNITDIR_DEB "/lib/systemd/system") + # # SVR4 layout # @@ -228,7 +231,8 @@ SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "") # will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE # layout is chosen) FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN SYSCONF SYSCONF2 - INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA UNIX_ADDR) + INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA UNIX_ADDR + SYSTEMD_UNIT) SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}} CACHE STRING "${var} installation directory" ${FORCE}) MARK_AS_ADVANCED(INSTALL_${var}DIR) diff --git a/cmake/systemd.cmake b/cmake/systemd.cmake index 7f027bdbf56..f031f4be0f4 100644 --- a/cmake/systemd.cmake +++ b/cmake/systemd.cmake @@ -22,9 +22,9 @@ MACRO(CHECK_SYSTEMD) IF(WITH_SYSTEMD STREQUAL "yes" OR WITH_SYSTEMD STREQUAL "auto") IF(PKG_CONFIG_FOUND) IF(WITH_SYSTEMD STREQUAL "yes") - pkg_check_modules(LIBSYSTEMD REQUIRED libsystemd) + pkg_search_module(LIBSYSTEMD REQUIRED libsystemd libsystemd-daemon) ELSE() - pkg_check_modules(LIBSYSTEMD libsystemd) + pkg_search_module(LIBSYSTEMD libsystemd libsystemd-daemon) ENDIF() IF(HAVE_DLOPEN) SET(LIBSYSTEMD ${LIBSYSTEMD_LIBRARIES}) @@ -51,17 +51,23 @@ MACRO(CHECK_SYSTEMD) CHECK_FUNCTION_EXISTS(sd_listen_fds HAVE_SYSTEMD_SD_LISTEN_FDS) CHECK_FUNCTION_EXISTS(sd_notify HAVE_SYSTEMD_SD_NOTIFY) CHECK_FUNCTION_EXISTS(sd_notifyf HAVE_SYSTEMD_SD_NOTIFYF) + SET(CMAKE_REQUIRED_LIBRARIES) IF(HAVE_SYSTEMD AND HAVE_SYSTEMD_SD_DAEMON_H AND HAVE_SYSTEMD_SD_LISTEN_FDS AND HAVE_SYSTEMD_SD_NOTIFY AND HAVE_SYSTEMD_SD_NOTIFYF) ADD_DEFINITIONS(-DHAVE_SYSTEMD) - # should be from pkg-config --variable=systemdsystemconfdir systemd - # Missing CMake macro: http://public.kitware.com/Bug/view.php?id=15634 - SET(SYSTEMD_SYSTEM_CONFDIR /etc/systemd/system) - # should be from pkg-config --variable=systemdsystemunitdir systemd - SET(SYSTEMD_SYSTEM_UNITDIR /usr/lib/systemd/system/) + SET(SYSTEMD_SCRIPTS mariadb-service-convert) + SET(SYSTEMD_DEB_FILES "usr/bin/mariadb-service-convert + ${INSTALL_SYSTEMD_UNITDIR}/mariadb.service + ${INSTALL_SYSTEMD_UNITDIR}/mariadb@.service + ${INSTALL_SYSTEMD_UNITDIR}/mariadb@bootstrap.service.d/wsrep-new-cluster.conf") + IF(DEB) + SET(SYSTEMD_EXECSTARTPRE "PermissionsStartOnly=true\nExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld") + SET(SYSTEMD_EXECSTARTPOST "ExecStartPost=/etc/mysql/debian-start") + ENDIF() MESSAGE(STATUS "Systemd features enabled") ELSE() UNSET(LIBSYSTEMD) + UNSET(HAVE_SYSTEMD) UNSET(HAVE_SYSTEMD_SD_DAEMON_H) UNSET(HAVE_SYSTEMD_SD_LISTEN_FDS) UNSET(HAVE_SYSTEMD_SD_NOTIFY) diff --git a/debian/control b/debian/control index f9dd0d72692..91e5fff32c2 100644 --- a/debian/control +++ b/debian/control @@ -23,7 +23,6 @@ Build-Depends: bison, zlib1g-dev (>= 1:1.1.3-5~), ${MAYBE_LIBCRACK} libjemalloc-dev (>= 3.0.0~) [linux-any] - libsystemd-daemon-dev | libsystemd-dev, dh-systemd Standards-Version: 3.8.2 Homepage: http://mariadb.org/ Vcs-Git: https://github.com/MariaDB/server.git diff --git a/debian/mariadb-server-10.1.files.in b/debian/mariadb-server-10.1.files.in index bd5cb55e55f..dbe5fb58ae0 100644 --- a/debian/mariadb-server-10.1.files.in +++ b/debian/mariadb-server-10.1.files.in @@ -55,7 +55,6 @@ usr/bin/wsrep_sst_mysqldump usr/bin/wsrep_sst_rsync usr/bin/wsrep_sst_xtrabackup usr/bin/wsrep_sst_xtrabackup-v2 -usr/bin/mariadb-system-convert usr/share/doc/mariadb-server-10.1/mysqld.sym.gz usr/share/doc/mariadb-server-10.1/INFO_SRC usr/share/doc/mariadb-server-10.1/INFO_BIN @@ -94,3 +93,4 @@ usr/share/mysql/wsrep_notify @CASSANDRA_DEB_FILES@ @SPIDER_DEB_FILES@ @TOKUDB_DEB_FILES@ +@SYSTEMD_DEB_FILES@ diff --git a/debian/mariadb-server-10.1.postinst b/debian/mariadb-server-10.1.postinst index 49a426aa9fc..3545557947f 100644 --- a/debian/mariadb-server-10.1.postinst +++ b/debian/mariadb-server-10.1.postinst @@ -286,6 +286,12 @@ fi db_stop # in case invoke failes +# dh_systemd_start doesn't emit anything since we still ship /etc/init.d/mysql. +# Thus MariaDB server is started via init.d script, which in turn redirects to +# systemctl. If we upgrade from MySQL mysql.service may be masked, which also +# means init.d script is disabled. Unmask mysql service explicitely. +deb-systemd-helper unmask mysql.service >/dev/null || true + #DEBHELPER# exit 0 diff --git a/debian/rules b/debian/rules index e16fb6436ca..1c824626dca 100755 --- a/debian/rules +++ b/debian/rules @@ -180,12 +180,6 @@ install: build install -m 0644 $(builddir)/Docs/INFO_SRC $(TMP)/usr/share/doc/mariadb-server-10.1/INFO_SRC install -m 0644 $(builddir)/Docs/INFO_BIN $(TMP)/usr/share/doc/mariadb-server-10.1/INFO_BIN - # systemd helpers - install -m 0755 scripts/mariadb-service-convert $(TMP)/usr/bin/ - install -d $(TMP)/etc/systemd/system/mariadb@bootstrap.service.d/ - install -m 0644 $(BUILDDIR)/support-files/mariadb-bootstrap.conf \ - $(TMP)/etc/systemd/system/mariadb@bootstrap.service.d/wsrep-new-cluster.conf - # mariadb-test mv $(TMP)/usr/mysql-test $(TMP)/usr/share/mysql @@ -221,10 +215,7 @@ binary-indep: build install dh_installexamples -i dh_installmenu -i dh_installlogrotate -i - dh_systemd_enable -i support-files/mariadb.service - dh_systemd_enable --no-enable support-files/mariadb@.service dh_installinit -i - dh_systemd_start -i --restart-after-upgrade mariadb.service dh_installcron -i dh_installman -i dh_installinfo -i @@ -250,9 +241,12 @@ binary-arch: build install dh_installexamples -a dh_installmenu -a dh_installlogrotate -a --name mysql-server + if [ -x /usr/bin/dh_systemd_enable -a -f debian/mariadb-server-10.1/lib/systemd/system/mariadb.service ]; then dh_systemd_enable -pmariadb-server-10.1 mariadb.service; fi + if [ -x /usr/bin/dh_systemd_enable -a -f debian/mariadb-server-10.1/lib/systemd/system/mariadb@.service ]; then dh_systemd_enable --no-enable -pmariadb-server-10.1 mariadb@.service; fi # Start mysql in runlevel 19 before 20 where apache, proftpd etc gets # started which might depend on a running database server. dh_installinit -a --name=mysql -- defaults 19 21 + if [ -x /usr/bin/dh_systemd_start -a -f debian/mariadb-server-10.1/lib/systemd/system/mariadb.service ]; then dh_systemd_start -pmariadb-server-10.1 --restart-after-upgrade mariadb.service; fi dh_installcron -a --name mysql-server dh_installman -a dh_installinfo -a diff --git a/include/my_systemd.h b/include/my_systemd.h index b130c7f4412..bef75576422 100644 --- a/include/my_systemd.h +++ b/include/my_systemd.h @@ -1,17 +1,34 @@ +/* + Copyright (c) 2015 Daniel Black. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ + #ifndef MY_SYSTEMD_INCLUDED #define MY_SYSTEMD_INCLUDED #if defined(HAVE_SYSTEMD) && !defined(EMBEDDED_LIBRARY) +/* + sd-daemon.h may include inttypes.h. Explicitly request format macros before + the first inclusion of inttypes.h. +*/ +#define __STDC_FORMAT_MACROS #include - #else - - - #define sd_notify(X, Y) #define sd_notifyf(E, F, ...) - #endif #endif /* MY_SYSTEMD_INCLUDED */ diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index e0c25ba9829..eb780169324 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -300,7 +300,7 @@ ELSE() mysqld_multi mysqld_safe ${WSREP_BINARIES} - mariadb-service-convert + ${SYSTEMD_SCRIPTS} ) FOREACH(file ${BIN_SCRIPTS}) IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh) diff --git a/scripts/mariadb-service-convert b/scripts/mariadb-service-convert index 78bf7269f70..3f241d13107 100755 --- a/scripts/mariadb-service-convert +++ b/scripts/mariadb-service-convert @@ -25,14 +25,7 @@ tz_old=$TZ -get_params() -{ -# does a return so needs to be wrapped in a function -# . /usr/bin/mysqld_safe --simulate - . scripts/mysqld_safe --simulate -} - -get_params +. /usr/bin/mysqld_safe --dry-run echo "# converted using $0" echo "#" @@ -66,10 +59,11 @@ if [ -n "$mysqld_ld_library_path" ]; then fi if [[ $want_syslog -eq 1 ]]; then + echo StandardOutput=syslog echo StandardError=syslog echo SyslogFacility=daemon - echo SyslogLevel=error - echo SyslogLevelPrefix=${syslog_tag_mysqld} + echo SyslogLevel=err + echo SyslogIdentifier=${syslog_tag_mysqld} fi if [[ "${flush_caches}" -gt 0 ]]; then @@ -83,4 +77,6 @@ if [[ "${numa_interleave}" -gt 0 ]]; then echo fi -[ -n "${CRASH_SCRIPT}" ] && echo FailureAction=${CRASH_SCRIPT} +if [ -n "${CRASH_SCRIPT}" ]; then + echo FailureAction=${CRASH_SCRIPT} +fi diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 1973e354281..13206ce0e56 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -21,7 +21,7 @@ mysqld_ld_library_path= flush_caches=0 numa_interleave=0 wsrep_on=0 -simulate=0 +dry_run=0 # Initial logging status: error log is not open, and not using syslog logging=init @@ -82,7 +82,7 @@ Usage: $0 [OPTIONS] --malloc-lib=LIB Preload shared library LIB if available --mysqld=FILE Use the specified file as mysqld --mysqld-version=VERSION Use "mysqld-VERSION" as mysqld - --simulate Simulate the start to detect errors but don't start + --dry-run Simulate the start to detect errors but don't start --nice=NICE Set the scheduling priority of mysqld --no-auto-restart Exit after starting mysqld --nowatch Exit after starting mysqld @@ -133,7 +133,7 @@ my_which () } log_generic () { - [ $simulate -eq 1 ] && return + [ $dry_run -eq 1 ] && return priority="$1" shift @@ -321,7 +321,7 @@ parse_arguments() { MYSQLD="mysqld" fi ;; - --simulate) simulate=1 ;; + --dry[-_]run) dry_run=1 ;; --nice=*) niceness="$val" ;; --nowatch|--no[-_]watch|--no[-_]auto[-_]restart) nowatch=1 ;; --open[-_]files[-_]limit=*) open_files="$val" ;; @@ -866,7 +866,7 @@ fi # # If there exists an old pid file, check if the daemon is already running # Note: The switches to 'ps' may depend on your operating system -if test -f "$pid_file" && [ $simulate -eq 0 ] +if test -f "$pid_file" && [ $dry_run -eq 0 ] then PID=`cat "$pid_file"` if @CHECK_PID@ @@ -941,9 +941,8 @@ fi # ulimit -n 256 > /dev/null 2>&1 # Fix for BSD and FreeBSD systems #fi - cmd="`mysqld_ld_preload_text`$NOHUP_NICENESS" -[ $simulate -eq 0 ] && cmd='' +[ $dry_run -eq 1 ] && cmd='' # # Set mysqld's memory interleave policy. @@ -963,7 +962,7 @@ then fi # Launch mysqld with numactl. - [ $simulate -eq 0 ] && cmd="$cmd numactl --interleave=all" + [ $dry_run -eq 0 ] && cmd="$cmd numactl --interleave=all" elif test $numa_interleave -eq 1 then log_error "--numa-interleave is not supported on this platform" @@ -976,8 +975,8 @@ do cmd="$cmd "`shell_quote_string "$i"` done cmd="$cmd $args" +[ $dry_run -eq 1 ] && return # Avoid 'nohup: ignoring input' warning -[ $simulate -eq 0 ] && cmd='true' test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null" log_notice "Starting $MYSQLD daemon with databases from $DATADIR" diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 9e2a3654768..80b94b8eda0 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1893,8 +1893,6 @@ static void __cdecl kill_server(int sig_ptr) else sql_print_error(ER_DEFAULT(ER_GOT_SIGNAL),my_progname,sig); /* purecov: inspected */ - sd_notify(0, "STOPPING=1"); - #ifdef HAVE_SMEM /* Send event to smem_event_connect_request for aborting @@ -2001,6 +1999,7 @@ void unireg_end(void) { clean_up(1); my_thread_end(); + sd_notify(0, "STATUS=MariaDB server is down"); #if defined(SIGNALS_DONT_BREAK_READ) exit(0); #else @@ -2066,6 +2065,7 @@ static void mysqld_exit(int exit_code) shutdown_performance_schema(); // we do it as late as possible #endif DBUG_LEAVE; + sd_notify(0, "STATUS=MariaDB server is down"); exit(exit_code); /* purecov: inspected */ } @@ -6547,10 +6547,8 @@ void handle_connections_sockets() socket_flags=fcntl(mysql_socket_getfd(unix_sock), F_GETFL, 0); #endif -#ifdef HAVE_SYSTEMD sd_notify(0, "READY=1\n" "STATUS=Taking your SQL requests now..."); -#endif DBUG_PRINT("general",("Waiting for connections.")); MAYBE_BROKEN_SYSCALL; @@ -6766,7 +6764,8 @@ void handle_connections_sockets() create_new_thread(thd); set_current_thd(0); } - sd_notify(0, "STOPPING=1"); + sd_notify(0, "STOPPING=1\n" + "STATUS=Shutdown in progress"); DBUG_VOID_RETURN; } diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 12cbfa3ae6d..47c09386ffc 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -1874,15 +1874,16 @@ loop: } } - progress=(ulong) (i * 100) / hash_get_n_cells(recv_sys->addr_hash); + progress = (ulong) (i * 100) + / hash_get_n_cells(recv_sys->addr_hash); if (has_printed - && progress != ((i + 1) * 100) - / hash_get_n_cells(recv_sys->addr_hash)) { + && progress + != ((i + 1) * 100) + / hash_get_n_cells(recv_sys->addr_hash)) { fprintf(stderr, "%lu ", progress); - sd_notifyf(0, "STATUS=Applying batch of log records for Innodb: " - "Progress %lu", progress); - + sd_notifyf(0, "STATUS=Applying batch of log records for" + " InnoDB: Progress %lu", progress); } } @@ -2094,8 +2095,9 @@ skip_this_recv_addr: fprintf(stderr, "%lu ", (ulong) ((100 * i) / n_hash_cells)); fflush(stderr); - sd_notifyf(0, "STATUS=Applying batch of log records for backup Innodb: " - "Progress %lu", (ulong) (100 * i) / n_hash_cells); + sd_notifyf(0, "STATUS=Applying batch of log records for" + " backup InnoDB: Progress %lu", + (ulong) (100 * i) / n_hash_cells); } } sd_notify(0, "STATUS=InnoDB: Apply batch for backup completed"); diff --git a/storage/xtradb/log/log0recv.cc b/storage/xtradb/log/log0recv.cc index a45ef61ea24..4cd577e6495 100644 --- a/storage/xtradb/log/log0recv.cc +++ b/storage/xtradb/log/log0recv.cc @@ -1942,15 +1942,16 @@ loop: } } - progress=(ulong) (i * 100) / hash_get_n_cells(recv_sys->addr_hash); + progress = (ulong) (i * 100) + / hash_get_n_cells(recv_sys->addr_hash); if (has_printed - && progress != ((i + 1) * 100) - / hash_get_n_cells(recv_sys->addr_hash)) { - - fprintf(stderr, "%lu ", progress); - sd_notifyf(0, "STATUS=Applying batch of log records for Innodb: " - "Progress %lu", progress); + && progress + != ((i + 1) * 100) + / hash_get_n_cells(recv_sys->addr_hash)) { + fprintf(stderr, "%lu ", progress); + sd_notifyf(0, "STATUS=Applying batch of log records for" + " InnoDB: Progress %lu", progress); } } @@ -2164,8 +2165,9 @@ skip_this_recv_addr: fprintf(stderr, "%lu ", (ulong) ((100 * i) / n_hash_cells)); fflush(stderr); - sd_notifyf(0, "STATUS=Applying batch of log records for backup Innodb: " - "Progress %lu", (ulong) (100 * i) / n_hash_cells); + sd_notifyf(0, "STATUS=Applying batch of log records for" + " backup InnoDB: Progress %lu", + (ulong) (100 * i) / n_hash_cells); } } sd_notify(0, "STATUS=InnoDB: Apply batch for backup completed"); diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt index 88fdf13bc3b..c357528954f 100644 --- a/support-files/CMakeLists.txt +++ b/support-files/CMakeLists.txt @@ -76,23 +76,35 @@ IF(UNIX) INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/mysql.server DESTINATION ${inst_location} COMPONENT SupportFiles) - IF(SYSTEMD_SYSTEM_UNITDIR) - CONFIGURE_FILE(mariadb@.service.in ${CMAKE_CURRENT_BINARY_DIR}/mariadb@.service @ONLY) - # @ in directory name broken between CMake version 2.8.12.2 and 3.3 - # http://public.kitware.com/Bug/view.php?id=14782 - INSTALL(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/mariadb-bootstrap.conf - DESTINATION "${SYSTEMD_SYSTEM_UNITDIR}/mariadb@bootstrap.service.d" COMPONENT Server - ) - INSTALL(FILES - ${CMAKE_CURRENT_BINARY_DIR}/mariadb@.service - ${CMAKE_CURRENT_SOURCE_DIR}/mariadb.service - DESTINATION ${SYSTEMD_SYSTEM_UNITDIR} COMPONENT Server - ) + IF(HAVE_SYSTEMD) + CONFIGURE_FILE(mariadb.service.in + ${CMAKE_CURRENT_BINARY_DIR}/mariadb.service @ONLY) + IF(NOT RPM) + CONFIGURE_FILE(mariadb@.service.in + ${CMAKE_CURRENT_BINARY_DIR}/mariadb@.service @ONLY) + INSTALL(FILES wsrep-new-cluster.conf + ${CMAKE_CURRENT_BINARY_DIR}/mariadb.service + ${CMAKE_CURRENT_BINARY_DIR}/mariadb@.service + DESTINATION ${inst_location}/systemd COMPONENT SupportFiles) + ENDIF() + IF(INSTALL_SYSTEMD_UNITDIR) + # @ in directory name broken between CMake version 2.8.12.2 and 3.3 + # http://public.kitware.com/Bug/view.php?id=14782 + IF(NOT RPM) + INSTALL(FILES wsrep-new-cluster.conf + DESTINATION + "${INSTALL_SYSTEMD_UNITDIR}/mariadb@bootstrap.service.d" + COMPONENT Server) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mariadb@.service + DESTINATION ${INSTALL_SYSTEMD_UNITDIR} COMPONENT Server) + ENDIF() + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mariadb.service + DESTINATION ${INSTALL_SYSTEMD_UNITDIR} COMPONENT Server) + ENDIF() ENDIF() IF (INSTALL_SYSCONFDIR) - INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mysql-log-rotate DESTINATION ${INSTALL_SYSCONFDIR}/logrotate.d RENAME mysql COMPONENT SupportFiles) INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/mysql.server diff --git a/support-files/mariadb-bootstrap.conf b/support-files/mariadb-bootstrap.conf deleted file mode 100644 index 2ee42b477ba..00000000000 --- a/support-files/mariadb-bootstrap.conf +++ /dev/null @@ -1,16 +0,0 @@ -# -# Install as /etc/systemd/system/mariadb@bootstrap.service.d/wsrep-new-cluster.conf -# -# This uses the multi instance version as a base. -# - -[Unit] - -ConditionPathExists= - -[Service] - -# Override the multi instance service for a bootstrap start instance -ExecStart= -ExecStart=/usr/sbin/mysqld $EXTRA_ARGS --wsrep-new-cluster - diff --git a/support-files/mariadb.service b/support-files/mariadb.service deleted file mode 100644 index 071d4bab745..00000000000 --- a/support-files/mariadb.service +++ /dev/null @@ -1,120 +0,0 @@ -# -# /etc/systemd/system/mariadb.service -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# Thanks to: -# Daniel Black -# Erkan Yanar -# David Strauss -# and probably others - -[Unit] -Description=MariaDB database server -After=network.target -After=syslog.target - -[Install] -WantedBy=multi-user.target -Alias=mysql.service -Alias=mysqld.service - - -[Service] - -############################################################################## -## Core requirements -## - -Type=notify - -# Setting this to true can break replication and the Type=notify settings -PrivateNetwork=false - -############################################################################## -## Package maintainers -## - -User=mysql - -# Execute pre and post scripts as root, otherwise it does it as User= -# PermissionsStartOnly=true - -# Needed to create system tables etc. -# ExecStartPre=/usr/bin/mysql_install_db - -# Start main service -# EXTRA_ARGS here is for users to set in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf -# Use the [service] section and Environment="EXTRA_ARGS=...". -# This isn't a replacement for my.cnf. -ExecStart=/usr/sbin/mysqld $EXTRA_ARGS - -KillMode=process -KillSignal=SIGTERM - -# Don't want to see an automated SIGKILL ever -SendSIGKILL=no - -# Exit status 1 is a fatal config error. Restarting won't help. -RestartPreventExitStatus=1 -Restart=on-failure -RestartSec=5s - -PrivateDevices=true - -UMask=077 - -############################################################################## -## USERs can override -## -## -## by creating a file in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf -## and adding/setting the following will override this file's settings. - -# Useful options not previously available in [mysqld_safe] - -# Kernels like killing mysqld when out of memory because its big. -# Lets temper that preference a little. -OOMScoreAdjust=-600 - -# Explicitly start with high IO priority -BlockIOWeight=1000 - -# If you don't use the /tmp directory for SELECT ... OUTFILE and -# LOAD DATA INFILE you can enable PrivateTmp=true for a little more security. -PrivateTmp=false - -## -## Options previously available to be set via [mysqld_safe] -## that now needs to be set by systemd config files as mysqld_safe -## isn't executed. -## - -# Number of files limit. previously [mysqld_safe] open-file-limit -LimitNOFILE=16364 - -# Maximium core size. previously [mysqld_safe] core-file-size -# LimitCore= - -# Nice priority. previously [mysqld_safe] nice -# Nice=-5 - -# Timezone. previously [mysqld_safe] timezone -# Environment="TZ=UTC" - -# Library substitutions. previously [mysqld_safe] malloc-lib with explict paths -# (in LD_LIBRARY_PATH) and library name (in LD_PRELOAD). -# Environment="LD_LIBRARY_PATH=/path1 /path2" "LD_PRELOAD= - -# Flush caches. previously [mysqld_safe] flush-caches=1 -# ExecStartPre=sync -# ExecStartPre=sysctl -q -w vm.drop_caches=3 - -# numa-interleave=1 equalivant -# Change ExecStart=numactl --interleave=all /usr/sbin/mysqld...... - -# crash-script equalivent -# FailureAction= diff --git a/support-files/mariadb.service.in b/support-files/mariadb.service.in new file mode 100644 index 00000000000..a40b3e18e27 --- /dev/null +++ b/support-files/mariadb.service.in @@ -0,0 +1,122 @@ +# +# /etc/systemd/system/mariadb.service +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. +# +# Thanks to: +# Daniel Black +# Erkan Yanar +# David Strauss +# and probably others + +[Unit] +Description=MariaDB database server +After=network.target +After=syslog.target + +[Install] +WantedBy=multi-user.target +Alias=mysql.service +Alias=mysqld.service + + +[Service] + +############################################################################## +## Core requirements +## + +Type=notify + +# Setting this to true can break replication and the Type=notify settings +# See also bind-address mysqld option. +PrivateNetwork=false + +############################################################################## +## Package maintainers +## + +User=mysql +Group=mysql + +# Execute pre and post scripts as root, otherwise it does it as User= +# PermissionsStartOnly=true + +# Needed to create system tables etc. +# ExecStartPre=/usr/bin/mysql_install_db + +# Start main service +# MYSQLD_OPTS here is for users to set in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf +# Use the [service] section and Environment="MYSQLD_OPTS=...". +# This isn't a replacement for my.cnf. +@SYSTEMD_EXECSTARTPRE@ +ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS +@SYSTEMD_EXECSTARTPOST@ + +KillMode=process +KillSignal=SIGTERM + +# Don't want to see an automated SIGKILL ever +SendSIGKILL=no + +# Restart crashed server only, on-failure would also restart, for example, when +# my.cnf contains unknown option +Restart=on-abort +RestartSec=5s + +UMask=007 + +############################################################################## +## USERs can override +## +## +## by creating a file in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf +## and adding/setting the following will override this file's settings. + +# Useful options not previously available in [mysqld_safe] + +# Kernels like killing mysqld when out of memory because its big. +# Lets temper that preference a little. +# OOMScoreAdjust=-600 + +# Explicitly start with high IO priority +# BlockIOWeight=1000 + +# If you don't use the /tmp directory for SELECT ... OUTFILE and +# LOAD DATA INFILE you can enable PrivateTmp=true for a little more security. +PrivateTmp=false + +## +## Options previously available to be set via [mysqld_safe] +## that now needs to be set by systemd config files as mysqld_safe +## isn't executed. +## + +# Number of files limit. previously [mysqld_safe] open-file-limit +# LimitNOFILE=16364 + +# Maximium core size. previously [mysqld_safe] core-file-size +# LimitCore= + +# Nice priority. previously [mysqld_safe] nice +# Nice=-5 + +# Timezone. previously [mysqld_safe] timezone +# Environment="TZ=UTC" + +# Library substitutions. previously [mysqld_safe] malloc-lib with explict paths +# (in LD_LIBRARY_PATH) and library name (in LD_PRELOAD). +# Environment="LD_LIBRARY_PATH=/path1 /path2" "LD_PRELOAD= + +# Flush caches. previously [mysqld_safe] flush-caches=1 +# ExecStartPre=sync +# ExecStartPre=sysctl -q -w vm.drop_caches=3 + +# numa-interleave=1 equalivant +# Change ExecStart=numactl --interleave=all /usr/sbin/mysqld...... + +# crash-script equalivent +# FailureAction= diff --git a/support-files/mariadb@.service.in b/support-files/mariadb@.service.in index bfcc71a8d40..b8ef969cf32 100644 --- a/support-files/mariadb@.service.in +++ b/support-files/mariadb@.service.in @@ -39,6 +39,7 @@ Alias=mysqld.service Type=notify # Setting this to true can break replication and the Type=notify settings +# See also bind-address mysqld option. PrivateNetwork=false ############################################################################## @@ -46,6 +47,7 @@ PrivateNetwork=false ## User=mysql +Group=mysql # Execute pre and post scripts as root, otherwise it does it as User= # PermissionsStartOnly=true @@ -54,16 +56,16 @@ User=mysql # ExecStartPre=/usr/bin/mysql_install_db # Start main service -# EXTRA_ARGS here is for users to set in /etc/systemd/system/mariadb@.service.d/MY_SPECIAL.conf -# Use the [service] section and Environment="EXTRA_ARGS=...". +# MYSQLD_OPTS here is for users to set in /etc/systemd/system/mariadb@.service.d/MY_SPECIAL.conf +# Use the [service] section and Environment="MYSQLD_OPTS=...". # This isn't a replacement for my.cnf. ExecStart= -ExecStart=/usr/sbin/mysqld $EXTRA_ARGS --defaults-file=@INSTALL_SYSCONF2DIR@/my%I.cnf +ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS --defaults-file=@INSTALL_SYSCONF2DIR@/my%I.cnf # Alternate: (remove ConditionPathExists above) # use [mysqld.INSTANCENAME] as sections in my.cnf # -# ExecStart=/usr/sbin/mysqld $EXTRA_ARGS --defaults-group-suffix=%I +# ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS --defaults-group-suffix=%I KillMode=process KillSignal=SIGTERM @@ -71,14 +73,12 @@ KillSignal=SIGTERM # Don't want to see an automated SIGKILL ever SendSIGKILL=no -# Exit status 1 is a fatal config error. Restarting won't help. -RestartPreventExitStatus=1 -Restart=on-failure +# Restart crashed server only, on-failure would also restart, for example, when +# my.cnf contains unknown option +Restart=on-abort RestartSec=5s -PrivateDevices=true - -UMask=077 +UMask=007 ############################################################################## ## USERs can override @@ -91,10 +91,10 @@ UMask=077 # Kernels like killing mysqld when out of memory because its big. # Lets temper that preference a little. -OOMScoreAdjust=-600 +# OOMScoreAdjust=-600 # Explicitly start with high IO priority -BlockIOWeight=1000 +# BlockIOWeight=1000 # If you don't use the /tmp directory for SELECT ... OUTFILE and # LOAD DATA INFILE you can enable PrivateTmp=true for a little more security. @@ -107,7 +107,7 @@ PrivateTmp=false ## # Number of files limit. previously [mysqld_safe] open-file-limit -LimitNOFILE=16364 +# LimitNOFILE=16364 # Maximium core size. previously [mysqld_safe] core-file-size # LimitCore= diff --git a/support-files/mysql.server.sh b/support-files/mysql.server.sh index c6a1db11935..385feaf75a5 100644 --- a/support-files/mysql.server.sh +++ b/support-files/mysql.server.sh @@ -97,6 +97,11 @@ lsb_functions="/lib/lsb/init-functions" if test -f $lsb_functions ; then . $lsb_functions else + # Include non-LSB RedHat init functions to make systemctl redirect work + init_functions="/etc/init.d/functions" + if test -f $init_functions; then + . $init_functions + fi log_success_msg() { echo " SUCCESS! $@" diff --git a/support-files/rpm/server-postin.sh b/support-files/rpm/server-postin.sh index 253350512ae..5b95b751212 100644 --- a/support-files/rpm/server-postin.sh +++ b/support-files/rpm/server-postin.sh @@ -1,12 +1,20 @@ - -# Make MySQL start/shutdown automatically when the machine does it. -if [ $1 = 1 ] ; then +if [ -f /usr/lib/systemd/system/mariadb.service -a -x /usr/bin/systemctl ]; then systemd_conf=/etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf - if [ -x /usr/bin/mariadb-service-convert -a ! -f "${systemd_conf}" ]; then - mkdir -p /etc/systemd/system/mariadb.service.d - /usr/bin/mariadb-service-convert > "${systemd_conf}" + if [ -x %{_bindir}/mariadb-service-convert -a ! -f "${systemd_conf}" ]; then + # Either fresh install or upgrade non-systemd -> systemd + mkdir -p /etc/systemd/system/mariadb.service.d + %{_bindir}/mariadb-service-convert > "${systemd_conf}" + # Make sure old possibly non-systemd instance is down + if [ $1 = 2 ]; then + SYSTEMCTL_SKIP_REDIRECT=1 %{_sysconfdir}/init.d/mysql stop >/dev/null 2>&1 || : + systemctl start mariadb >/dev/null 2>&1 || : + fi + systemctl enable mariadb.service >/dev/null 2>&1 || : fi +fi +# Make MySQL start/shutdown automatically when the machine does it. +if [ $1 = 1 ] ; then if [ -x /usr/bin/systemctl ] ; then /usr/bin/systemctl daemon-reload >/dev/null 2>&1 fi diff --git a/support-files/wsrep-new-cluster.conf b/support-files/wsrep-new-cluster.conf new file mode 100644 index 00000000000..a71b26ae788 --- /dev/null +++ b/support-files/wsrep-new-cluster.conf @@ -0,0 +1,16 @@ +# +# Install as /etc/systemd/system/mariadb@bootstrap.service.d/wsrep-new-cluster.conf +# +# This uses the multi instance version as a base. +# + +[Unit] + +ConditionPathExists= + +[Service] + +# Override the multi instance service for a bootstrap start instance +ExecStart= +ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS --wsrep-new-cluster + -- cgit v1.2.1