mirror of
https://github.com/openwrt/packages.git
synced 2025-12-22 01:44:32 +04:00
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>
148 lines
3.0 KiB
Bash
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
|
|
}
|