You are not logged in.
Pages: 1
Trying to get MySQL to start in Devuan Chimaera, noticed that the MYSQL distributed for bullseye no longer includes a SysVinit file.
This is a workaround using an older init file:
Add to
/etc/apt/sources.list.d/mysql.list
:
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out entries below, but any other modifications may be lost.
# Use command 'dpkg-reconfigure mysql-apt-config' as root for modifications.
deb http://repo.mysql.com/apt/debian/ bullseye mysql-apt-config
deb http://repo.mysql.com/apt/debian/ bullseye mysql-8.0
deb http://repo.mysql.com/apt/debian/ bullseye mysql-tools
##deb http://repo.mysql.com/apt/debian/ bullseye mysql-tools-preview
deb-src http://repo.mysql.com/apt/debian/ bullseye mysql-8.0
Install with apt as usual
Add to
/etc/init.d/mysql
:
!/bin/bash
#
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network $time
# Should-Stop: $network $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/ Stop MySQL Community Server daemon
# Description: This service script facilitates startup and shutdown of
# mysqld daemon throught its wrapper script mysqld_safe
### END INIT INFO
#
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. 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, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# 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, version 2.0, 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 St, Fifth Floor, Boston, MA 02110-1301 USA
. /lib/lsb/init-functions
. /usr/share/mysql-8.0/mysql-helpers
cd /
umask 077
# In case server is taking more to start or stop increase the timeout here
STARTTIMEOUT=180
STOPTIMEOUT=60
# We need to check that the binaries exist; When upgrading from community to commercial this
# script will be run after community is removed but before commercial is installed
VERSION="unknown"
if pathfind mysqld; then
VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4)
fi
MYSQLRUN=/var/run/mysqld
MYSQLDATA=$(get_mysql_option mysqld datadir "/var/lib/mysql")
MYSQLFILES=/var/lib/mysql-files
MYSQLKEYRING=/var/lib/mysql-keyring
MYSQLLOG=/var/log/mysql
# Do a quick check that the user is allowed to access the pid file
MYSQLDATA=$(get_mysql_option mysqld datadir "/var/lib/mysql")
if [ -d "$MYSQLDATA" ] && [ ! -r "$MYSQLDATA" ];
then
echo "Permission denied. Please run as root."
exit 1
fi
case "$1" in
'start')
if [ "$(get_running)" -eq 1 ];
then
log_action_msg "A MySQL Server is already started"
else
verify_ready
verify_database
su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &"
verify_server start
if [ "$?" -eq 0 ];
then
log_action_msg "MySQL Community Server ${VERSION} is started"
else
log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details."
fi
fi
;;
'stop')
if [ "$(get_running)" -eq 1 ];
then
killall -u mysql
verify_server stop
if [ "$?" -eq 0 ];
then
log_action_msg "MySQL Community Server ${VERSION} is stopped"
else
log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out"
fi
else
log_action_msg "MySQL Community Server ${VERSION} is already stopped"
fi
;;
'restart'|'reload'|'force-reload')
log_action_msg "Stopping MySQL Community Server ${VERSION}"
$0 stop
log_action_msg "Re-starting MySQL Community Server ${VERSION}"
$0 start
;;
'status')
if [ "$(get_running)" -eq 1 ];
then
log_action_msg "MySQL Community Server ${VERSION} is running"
else
log_action_msg "MySQL Community Server ${VERSION} is not running"
exit 3
fi
;;
*)
echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
exit 1
;;
esac
exit 0
chmod +x the file and
update-rc.d mysql defaults
Basic tests OK, starts and status reported properly
Offline
Isn't it called mariadb in chimaera?
Online
Indeed. And package mariadb-server-10.5 on Chimaera provides an /etc/init.d/mariadb init script:
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: mariadb
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network $named $time
# Should-Stop: $network $named $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop the mysql database server daemon
# Description: Controls the main MariaDB database server daemon "mariadbd"
# and its wrapper script "mysqld_safe".
### END INIT INFO
#
set -e
set -u
${DEBIAN_SCRIPT_DEBUG:+ set -v -x}
test -x /usr/sbin/mariadbd || exit 0
. /lib/lsb/init-functions
SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
# priority can be overridden and "-s" adds output to stderr
ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mariadb -i"
if [ -f /etc/default/mysql ]; then
. /etc/default/mysql
fi
# Also source default/mariadb in case the installation was upgraded from
# packages originally installed from MariaDB.org repositories, which have
# had support for reading /etc/default/mariadb since March 2016.
if [ -f /etc/default/mariadb ]; then
. /etc/default/mariadb
fi
# Safeguard (relative paths, core dumps..)
cd /
umask 077
# mysqladmin likes to read /root/.my.cnf. This is usually not what I want
# as many admins e.g. only store a password without a username there and
# so break my scripts.
export HOME=/etc/mysql/
## Fetch a particular option from mysql's invocation.
#
# Usage: void mariadbd_get_param option
mariadbd_get_param() {
/usr/sbin/mariadbd --print-defaults \
| tr " " "\n" \
| grep -- "--$1" \
| tail -n 1 \
| cut -d= -f2
}
## Do some sanity checks before even trying to start mariadbd.
sanity_checks() {
# check for config file
if [ ! -r /etc/mysql/my.cnf ]; then
log_warning_msg "$0: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz"
echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER
fi
# check for diskspace shortage
datadir=`mariadbd_get_param datadir`
if LC_ALL=C BLOCKSIZE= df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then
log_failure_msg "$0: ERROR: The partition with $datadir is too full!"
echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER
exit 1
fi
}
## Checks if there is a server running and if so if it is accessible.
#
# check_alive insists on a pingable server
# check_dead also fails if there is a lost mariadbd in the process list
#
# Usage: boolean mariadbd_status [check_alive|check_dead] [warn|nowarn]
mariadbd_status () {
ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))
ps_alive=0
pidfile=`mariadbd_get_param pid-file`
if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
if [ "$1" = "check_alive" -a $ping_alive = 1 ] ||
[ "$1" = "check_dead" -a $ping_alive = 0 -a $ps_alive = 0 ]; then
return 0 # EXIT_SUCCESS
else
if [ "$2" = "warn" ]; then
echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
fi
return 1 # EXIT_FAILURE
fi
}
#
# main()
#
case "${1:-''}" in
'start')
sanity_checks;
# Start daemon
log_daemon_msg "Starting MariaDB database server" "mariadbd"
if mariadbd_status check_alive nowarn; then
log_progress_msg "already running"
log_end_msg 0
else
# Could be removed during boot
test -e /run/mysqld || install -m 755 -o mysql -g root -d /run/mysqld
# Start MariaDB!
/usr/bin/mysqld_safe "${@:2}" 2>&1 >/dev/null | $ERR_LOGGER &
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}"); do
sleep 1
if mariadbd_status check_alive nowarn ; then break; fi
log_progress_msg "."
done
if mariadbd_status check_alive warn; then
log_end_msg 0
# Now start mysqlcheck or whatever the admin wants.
output=$(/etc/mysql/debian-start)
if [ -n "$output" ]; then
log_action_msg "$output"
fi
else
log_end_msg 1
log_failure_msg "Please take a look at the syslog"
fi
fi
;;
'stop')
# * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible
# at least for cron, we can rely on it here, too. (although we have
# to specify it explicit as e.g. sudo environments points to the normal
# users home and not /root)
log_daemon_msg "Stopping MariaDB database server" "mariadbd"
if ! mariadbd_status check_dead nowarn; then
set +e
shutdown_out=`$MYADMIN shutdown 2>&1`; r=$?
set -e
if [ "$r" -ne 0 ]; then
log_end_msg 1
[ "$VERBOSE" != "no" ] && log_failure_msg "Error: $shutdown_out"
log_daemon_msg "Killing MariaDB database server by signal" "mariadbd"
killall -15 mariadbd
server_down=
for i in `seq 1 600`; do
sleep 1
if mariadbd_status check_dead nowarn; then server_down=1; break; fi
done
if test -z "$server_down"; then killall -9 mariadbd; fi
fi
fi
if ! mariadbd_status check_dead warn; then
log_end_msg 1
log_failure_msg "Please stop MariaDB manually and read /usr/share/doc/mariadb-server-10.5/README.Debian.gz!"
exit -1
else
log_end_msg 0
fi
;;
'restart')
set +e; $SELF stop; set -e
shift
$SELF start "${@}"
;;
'reload'|'force-reload')
log_daemon_msg "Reloading MariaDB database server" "mariadbd"
$MYADMIN reload
log_end_msg 0
;;
'status')
if mariadbd_status check_alive nowarn; then
log_action_msg "$($MYADMIN version)"
else
log_action_msg "MariaDB is stopped."
exit 3
fi
;;
'bootstrap')
# Bootstrap the cluster, start the first node
# that initiates the cluster
log_daemon_msg "Bootstrapping the cluster" "mariadbd"
$SELF start "${@:2}" --wsrep-new-cluster
;;
*)
echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
exit 1
;;
esac
Offline
Isn't it called mariadb in chimaera?
no, mariadb is a fork of mysql. 2 different products. you can see OP is using external repo specifically for mysql.
Offline
True. And the OP may also have their good reasons for not using mariadb, which is the "product line" that is supported within the Devuan context (well, Debian context really, since it's not forked).
Online
Pages: 1