summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@mariadb.org>2015-09-28 15:08:09 +0400
committerSergey Vojtovich <svoj@mariadb.org>2015-10-12 17:51:49 +0200
commit6346d1de2fdaa8a8359082871eac49402cb0e472 (patch)
tree62a057a2b8ab0b24bc242461522017e333fe741f
parent20c2ae39db3dd0ec4c337a9b0bd2bf4481b61e49 (diff)
downloadmariadb-git-6346d1de2fdaa8a8359082871eac49402cb0e472.tar.gz
MDEV-427/MDEV-5713 Add systemd script with notify functionality
After review/QA fixes.
-rw-r--r--cmake/install_layout.cmake6
-rw-r--r--cmake/systemd.cmake20
-rw-r--r--debian/control1
-rw-r--r--debian/mariadb-server-10.1.files.in2
-rw-r--r--debian/mariadb-server-10.1.postinst6
-rwxr-xr-xdebian/rules12
-rw-r--r--include/my_systemd.h27
-rw-r--r--scripts/CMakeLists.txt2
-rwxr-xr-xscripts/mariadb-service-convert18
-rw-r--r--scripts/mysqld_safe.sh17
-rw-r--r--sql/mysqld.cc9
-rw-r--r--storage/innobase/log/log0recv.cc18
-rw-r--r--storage/xtradb/log/log0recv.cc20
-rw-r--r--support-files/CMakeLists.txt40
-rw-r--r--support-files/mariadb.service.in (renamed from support-files/mariadb.service)26
-rw-r--r--support-files/mariadb@.service.in26
-rw-r--r--support-files/mysql.server.sh5
-rw-r--r--support-files/rpm/server-postin.sh20
-rw-r--r--support-files/wsrep-new-cluster.conf (renamed from support-files/mariadb-bootstrap.conf)2
19 files changed, 164 insertions, 113 deletions
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 <systemd/sd-daemon.h>
-
#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.service b/support-files/mariadb.service.in
index 071d4bab745..a40b3e18e27 100644
--- a/support-files/mariadb.service
+++ b/support-files/mariadb.service.in
@@ -32,6 +32,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
##############################################################################
@@ -39,6 +40,7 @@ PrivateNetwork=false
##
User=mysql
+Group=mysql
# Execute pre and post scripts as root, otherwise it does it as User=
# PermissionsStartOnly=true
@@ -47,10 +49,12 @@ 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=/usr/sbin/mysqld $EXTRA_ARGS
+@SYSTEMD_EXECSTARTPRE@
+ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS
+@SYSTEMD_EXECSTARTPOST@
KillMode=process
KillSignal=SIGTERM
@@ -58,14 +62,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
@@ -78,10 +80,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.
@@ -94,7 +96,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/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/mariadb-bootstrap.conf b/support-files/wsrep-new-cluster.conf
index 2ee42b477ba..a71b26ae788 100644
--- a/support-files/mariadb-bootstrap.conf
+++ b/support-files/wsrep-new-cluster.conf
@@ -12,5 +12,5 @@ ConditionPathExists=
# Override the multi instance service for a bootstrap start instance
ExecStart=
-ExecStart=/usr/sbin/mysqld $EXTRA_ARGS --wsrep-new-cluster
+ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS --wsrep-new-cluster