File: //var/packages/MariaDB10/scripts/start-stop-status
#!/bin/sh
# Copyright (C) 2000-2017 Synology Inc. All rights reserved.
. "$(dirname $0)"/common
. "$(dirname $0)"/lib
PKGVERSION=`/bin/get_key_value /var/packages/$PACKAGE_NAME/INFO version`
PID_FILE=/run/mysqld/mysqld10.pid
# FIXME remove DO_LINK for DSM8.0
DO_LINK
################################
# Hook
################################
HOOK_MARIADB_CHPW=/usr/local/plugin/mariadb10_chpw
HOOK_MARIADB_START=/usr/local/plugin/mariadb10_start
HOOK_MARIADB_STOP=/usr/local/plugin/mariadb10_stop
UpgradeDatabase()
{
local _DBVERSION=`cat ${DATADIR}/VERSION`
local _PKGVERSION=`echo $PKGVERSION | sed 's|\(.*\)-[0-9]*|\1|'`
local _DATADIR="`readlink ${DATADIR}`"
if [ x${_DBVERSION} = x${_PKGVERSION} ]; then
logger -p info "MariaDB: UpgradeDatabase: The same version, skip to upgrade ..."
return 0
fi
echo "run mariadb-update from prev_ver=${_DBVERSION}"
# enter single user mode to bypass authentication
$MYSQL_SERVER status && $MYSQL_SERVER stop
if ! StartSingleUser; then
logger -p err "MariaDB: UpgradeDatabase: Failed to enter single user mode"
return 1
fi
if ! env LC_ALL=en_US.utf8 "$BIN_MYSQL_UPGRADE" --force -u root; then
logger -p err "MariaDB: UpgradeDatabase: Failed to upgrade MySQL"
$MYSQL_SERVER stop
return 1
else
echo ${PKGVERSION} | sed 's|\(.*\)-[0-9]*|\1|' > ${DATADIR}/VERSION
logger -p err "MariaDB: UpgradeDatabase: Upgrade database successfully"
fi
# leave single mode
$MYSQL_SERVER stop || exit 1
return 0
}
MigrateRedoLogIfNeed()
{
MDB103BASE="/var/packages/MariaDB10/target/usr/local/mariadb10.3"
MDB103LINK="/usr/local/mariadb10.3"
DATA_VERSION=$(cat /var/packages/MariaDB10/var/mariadb10/VERSION)
if [ ${DATA_VERSION::4} == "10.3" ]; then
ln -s ${MDB103BASE} ${MDB103LINK}
${MDB103BASE}/share/mysql/mysql.server start
${MDB103BASE}/share/mysql/mysql.server stop
rm -rf ${MDB103LINK}
fi
rm -rf ${MDB103BASE}
}
CallChpwHooks()
{
# Execute hook files
local user="$1"
local pwfile="$2"
local ret=0
local hook
for hook in "$HOOK_MARIADB_CHPW/"*; do
if [ ! -x "$hook" ]; then
continue
fi
if ! "$hook" "$user" "$pwfile"; then
logger -p 0 "MariaDB: CallChpwHooks: mariadb_chpw hook failed on '$hook' with dbuser '$user'"
ret=1
fi
done
return $ret
}
CallHooks()
{
local hook_path="$1"
local hook
local ret=0
for hook in "$hook_path/"*; do
if [ ! -x "$hook" ]; then
continue
fi
if ! "$hook"; then
logger -p 0 "MariaDB: CallHooks: $(basename "$hook_path") hook failed"
ret=1
fi
done
return $ret
}
ResetPassword()
{
touch /tmp/mysql_init.$$
chown mysql:mysql /tmp/mysql_init.$$
chmod 600 /tmp/mysql_init.$$
# NO_AUTO_CREATE_USER is default since MariaDB 10.1.7
cat > /tmp/mysql_init.$$ <<EOF
DROP USER IF EXISTS 'root'@'%';
DROP USER IF EXISTS 'root'@'localhost';
CREATE USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('$(echo "$RESET_DEFAULT_PASSWORD" | quote_sql)');
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
EOF
$MYSQL_SERVER start --init-file=/tmp/mysql_init.$$
rm /tmp/mysql_init.$$
CallChpwHooks root "${RESET_DEFAULT_PASSWORD}"
return $?
}
case $1 in
start)
MigrateRedoLogIfNeed
DO_LINK
$MYSQL_SERVER status && exit 0
ChkExecEnv
if [ singleuser = "$2" ]; then
# start for backup process
StartSingleUser || exit 1
else
# normal start
UpgradeDatabase || exit 1
if $MYSQL_SERVER start; then
CallHooks "$HOOK_MARIADB_START"
fi
ln -sf /run/mysqld/mysqld10.sock /run/mysqld/mysqld.sock
$MYSQL_SERVER status
fi
;;
stop)
ChkExecEnv
if $MYSQL_SERVER status; then
$MYSQL_SERVER stop
fi
CallHooks "$HOOK_MARIADB_STOP"
rm -f /run/mysqld/mysqld.sock
;;
restart)
DO_LINK
ChkExecEnv
UpgradeDatabase || exit 1
$MYSQL_SERVER restart
;;
reload)
$MYSQL_SERVER reload
;;
status)
DO_LINK
$MYSQL_SERVER status
;;
chpw)
CallChpwHooks "$2" "$3"
exit $?
;;
resetpassword)
$0 stop
ResetPassword
Ret=$?
$0 stop
exit $Ret
;;
rebuild)
mysqlPath=$(readlink "${DATADIR}")
[ -d "${mysqlPath}" ] && rm -rf "${mysqlPath}"
RebuildDatabase
;;
esac