Files
packages/utils/mariadb/files/mysqld.init
Michal Hrusecky 7c628580a6 mariadb: Use defaults and change default datadir
Use /srv/mysql as default datadir as /var/lib/mysql is in tmpfs. This
doesn't affect any existing setup as up till now it had to be always
specified in configuration. That is addressed in the second part of this
commit - init script now uses even defaults as compiled in MariaDB so
not everything has to be specified in configuration file.

Signed-off-by: Michal Hrusecky <michal.hrusecky@turris.com>
2020-10-13 08:58:29 +02:00

148 lines
3.0 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2010-2018 OpenWrt.org
# shellcheck disable=SC2034
START=95
# shellcheck disable=SC2034
STOP=10
NAME=mysqld
LOGGER="/usr/bin/logger -p user.err -s -t $NAME --"
[ -x "$LOGGER" ] || LOGGER="echo"
MYSQLADMIN="/usr/bin/mysqladmin"
MYSQLD="/usr/bin/$NAME"
MYSQLDSAFE="/usr/bin/mysqld_safe"
# mysqladmin likes to read /root/.my.cnf which could cause issues.
export HOME="/etc/mysql"
# Safeguard (relative paths, core dumps...)
cd /
mysqld_get_param() {
/usr/bin/mysqld --help --verbose | sed -n 's|^'"$1"'[[:blank:]]\+||p'
}
# Checks if a server is running and accessible.
#
# check_alive insists on a pingable server
# check_dead also fails if there is a lost mysqld in the process list
#
# Usage: boolean mysqld_status [check_alive|check_dead]
mysqld_status() {
if $MYSQLADMIN ping >/dev/null 2>&1; then
ping_alive=1
else
ping_alive=0
fi
ps_alive=0
pidfile="$(mysqld_get_param pid-file)"
if [ -f "$pidfile" ] && kill -0 "$(cat "$pidfile")" >/dev/null 2>&1; then
ps_alive=1
fi
if { [ "$1" = check_alive ] && [ $ping_alive = 1 ]; } || \
{ [ "$1" = check_dead ] && [ $ping_alive = 0 ] \
&& [ $ps_alive = 0 ]; }
then
return 0 # EXIT_SUCCESS
else
return 1 # EXIT_FAILURE
fi
}
start() {
conf=/etc/mysql/my.cnf
logdir=/var/log/mysql
rundir=/var/run/mysqld
hint="please fix your server configuration in /etc/mysql/"
for i in "$MYSQLD" "$MYSQLADMIN" "$MYSQLDSAFE"; do
if [ ! -x "$i" ]; then
$LOGGER "$i is missing"
exit 1
fi
done
if [ ! -r "$conf" ]; then
$LOGGER "$conf cannot be read"
exit 1
fi
config_load "$NAME"
config_get_bool enabled general enabled 0
# shellcheck disable=SC2154
if [ "$enabled" -eq 0 ]; then
$LOGGER "service not enabled in /etc/config/$NAME"
exit 1
fi
config_get options general options
datadir="$(mysqld_get_param datadir)"
tmpdir="$(mysqld_get_param tmpdir)"
if [ -z "$datadir" ]; then
$LOGGER "datadir is not set"
$LOGGER "$hint"
exit 1
fi
if [ -z "$tmpdir" ]; then
$LOGGER "tmpdir is not set"
$LOGGER "$hint"
exit 1
fi
if [ ! -f "$datadir/mysql/tables_priv.MAD" ]; then
args="--force"
basedir="$(mysqld_get_param basedir)"
[ -n "$basedir" ] && args="$args --basedir=$basedir"
$LOGGER "Cannot detect privileges table. You might need to run"
$LOGGER "'mysql_install_db \"$args\"'"
$LOGGER "to initialize the system tables."
exit 1
fi
# Start daemon
if mysqld_status check_alive; then
$LOGGER "server is already running"
else
for i in "$logdir" "$rundir"; do
opts="-m 0750"
if ! [ -e "$i" ]; then
# $rundir needs to be accessible for
# clients
if [ "$i" = "$rundir" ]; then
opts=
fi
# shellcheck disable=SC2086
mkdir -p $opts "$i"
[ -d "$i" ] && chown mariadb:mariadb "$i"
fi
done
# shellcheck disable=SC2154,SC2086
"$MYSQLDSAFE" $options >/dev/null 2>&1 &
fi
}
stop() {
if ! mysqld_status check_dead; then
"$MYSQLADMIN" shutdown
fi
}
reload() {
if mysqld_status check_alive; then
"$MYSQLADMIN" reload
else
$LOGGER "server is not running"
fi
}