service mysql ne parvient pas à démarrer/raccroche - délai d'attente (Ubuntu, MariaDB)
J'ai créé mon premier Serveur Ubuntu avec Ubuntu 16.04, nginx, php7.0, MariaDB, nextcloud et externes DynDNS hier (utilisé ce Tutoriel: https://www.rosehosting.com/blog/install-nextcloud-on-ubuntu-16-04/).
Tout a bien fonctionné mais depuis que j'ai redémarré le serveur aujourd'hui nextcloud juste me montre une page vierge. Après avoir cliqué sur tous les logs de nginx, MariaDB et nextcloud j'ai trouvé que le service mysql ne démarre pas. Afin de fonctionner service mysql start
et tout a bien fonctionné à nouveau (appel nextcloud de serveur ainsi que d'autres stations de travail). J'ai juste demandé que le terminal n'a pas de "fermer" le ligne. Comme il travaillait encore sur la commande. Après environ 5 minutes, la ligne "ferme" et le message
"Emploi pour mariadb.service a échoué en raison d'un délai d'attente est dépassé. Voir
"systemctl status mariadb.de service" et "journalctl -xe" pour plus de détails."
s'affiche (voir ci-dessous). Ensuite, les clients, juste une page blanche dans nextcloud. Lorsque je lance la commande et fermer immédiatement le Terminal de clients à obtenir l'accès, mais de le perdre au bout de 5 minutes.
J'ai essayé de sauvegarder le nextcloud sql et exécuter apt-get purge --auto-remove mariadb-server
. Puis de nouveau le MariaDB les étapes de l'installation de l'Tutoriel avec l'importation de la sauvegarde sql au lieu d'en créer une nouvelle. Ne pas tout changer.
Prochain essai a été update-rc.d mysql defaults
et update-rc.d mysql enable
. Mais après un redémarrage, juste le vide de la page à nouveau. L'accès n'est possible que pour 5 minutes, en commençant par le manuel de service.
J'ai aussi essayé la BUM - BootUpManager mais le service semble être anabled. J'ai vu que vous pouvez démarrer les services, souvent manuellement. Donc essayé avec mysql et surprise: nextcloud disponible pendant 5 minutes en le CUL tout raccroche 😀
J'ai trouvé mariadb.com/kb/en/mariadb/starting-and-stopping-mariadb-automatically/ainsi essayé mais rien de cela, car il semble qu'il y est quelque chose d'autre de vraiment mauvais.
root@s1:~# systemctl status mariadb.service
:
\u25cf mariadb.service - MariaDB database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset:
Drop-In: /etc/systemd/system/mariadb.service.d
\u2514\u2500migrated-from-my.cnf-settings.conf
Active: failed (Result: timeout) since Di 2016-12-06 14:52:51 CET; 55s ago
Process: 3565 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WS
Process: 3415 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR
Process: 3409 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START
Process: 3405 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/ru
Main PID: 3565 (code=exited, status=0/SUCCESS)
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] /usr/sbin
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] Event Sch
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 2147785536 [Note] InnoDB: F
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] InnoDB: S
Dez 06 14:52:49 s1 mysqld[3565]: 2016-12-06 14:52:49 3067387712 [Note] InnoDB: W
Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] InnoDB: S
Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] /usr/sbin
Dez 06 14:52:51 s1 systemd[1]: Failed to start MariaDB database server.
Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Unit entered failed state.
Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Failed with result 'timeout'.
root@s1:~# journalctl -xe
:
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] Event Scheduler: Purging the queue. 0 events
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 2147785536 [Note] InnoDB: FTS optimize thread exiting.
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] InnoDB: Starting shutdown...
Dez 06 14:52:49 s1 mysqld[3565]: 2016-12-06 14:52:49 3067387712 [Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer po
Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] InnoDB: Shutdown completed; log sequence number 111890806
Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] /usr/sbin/mysqld: Shutdown complete
Dez 06 14:52:50 s1 audit[3648]: AVC apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profi
Dez 06 14:52:50 s1 kernel: audit: type=1400 audit(1481032370.973:29): apparmor="DENIED" operation="sendmsg" info="Failed name lookup -
Dez 06 14:52:50 s1 audit[3565]: AVC apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profi
Dez 06 14:52:50 s1 kernel: audit: type=1400 audit(1481032370.973:30): apparmor="DENIED" operation="sendmsg" info="Failed name lookup -
Dez 06 14:52:51 s1 systemd[1]: Failed to start MariaDB database server.
-- Subject: Unit mariadb.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mariadb.service has failed.
--
-- The result is failed.
Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Unit entered failed state.
Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Failed with result 'timeout'.
Dez 06 14:54:54 s1 x11vnc[2665]: 06/12/2016 14:54:54 cursor_noshape_updates_clients: 1
Dez 06 14:55:16 s1 ntpd[1244]: 46.4.1.155 local addr 192.168.178.50 -> <null>
Dez 06 14:57:30 s1 ntpd[1244]: 89.238.66.98 local addr 192.168.178.50 -> <null>
Contenu dans /ect/init.d (si utile):
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: mysql
# 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 "mysqld"
# and its wrapper script "mysqld_safe".
### END INIT INFO
#
set -e
set -u
${DEBIAN_SCRIPT_DEBUG:+ set -v -x}
test -x /usr/sbin/mysqld || exit 0
. /lib/lsb/init-functions
SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
CONF=/etc/mysql/my.cnf
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
# priority can be overriden and "-s" adds output to stderr
ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i"
# 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/
# Source default config file.
[ -r /etc/default/mariadb ] && . /etc/default/mariadb
## Fetch a particular option from mysql's invocation.
#
# Usage: void mysqld_get_param option
mysqld_get_param() {
/usr/sbin/mysqld --print-defaults \
| tr " " "\n" \
| grep -- "--$1" \
| tail -n 1 \
| cut -d= -f2
}
## Do some sanity checks before even trying to start mysqld.
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=`mysqld_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 mysqld in the process list
#
# Usage: boolean mysqld_status [check_alive|check_dead] [warn|nowarn]
mysqld_status () {
ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))
ps_alive=0
pidfile=`mysqld_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" "mysqld"
if mysqld_status check_alive nowarn; then
log_progress_msg "already running"
log_end_msg 0
else
# Could be removed during boot
test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld
# Start MariaDB!
/usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &
# 6s was reported in #352070 to be too little
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-60}"); do
sleep 1
if mysqld_status check_alive nowarn ; then break; fi
log_progress_msg "."
done
if mysqld_status check_alive warn; then
log_end_msg 0
# Now start mysqlcheck or whatever the admin wants.
output=$(/etc/mysql/debian-start)
[ -n "$output" ] && log_action_msg "$output"
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" "mysqld"
if ! mysqld_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" "mysqld"
killall -15 mysqld
server_down=
for i in `seq 1 600`; do
sleep 1
if mysqld_status check_dead nowarn; then server_down=1; break; fi
done
if test -z "$server_down"; then killall -9 mysqld; fi
fi
fi
if ! mysqld_status check_dead warn; then
log_end_msg 1
log_failure_msg "Please stop MariaDB manually and read /usr/share/doc/mariadb-server-10.1/README.Debian.gz!"
exit -1
else
log_end_msg 0
fi
;;
'restart')
set +e; $SELF stop; set -e
$SELF start
;;
'reload'|'force-reload')
log_daemon_msg "Reloading MariaDB database server" "mysqld"
$MYADMIN reload
log_end_msg 0
;;
'status')
if mysqld_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" "mysqld"
$SELF start "${@:2}" --wsrep-new-cluster
;;
*)
echo "Usage: $SELF start|stop|restart|reload|force-reload|status|bootstrap"
exit 1
;;
esac
Malheureusement, Google ne peut pas m'aider. Je trid expliquer autant que je peux, peut-être que cela vous aide à vous de m'aider. Merci beaucoup!
OriginalL'auteur Lw Bi | 2016-12-06
Vous devez vous connecter pour publier un commentaire.
FYI:
Dans mon cas, ni la solution de Vincent ou Lw Bi travaillé exactement, j'ai besoin de quelques autres actions.
Désactiver le profil par le biais de placer un lien dans
/etc/apparmor.d/disable/
n'a tout simplement pas de travail, je ne sais pas pourquoi.D'autre part, la mise en MySQL à se plaindre de mode de ne pas travailler immédiatement.
Réglage
/usr/sbin/mysqld
à se plaindre mode.J'ai besoin d'ajouter les lignes:
à
/etc/apparmor.d/usr.sbin.mysqld
, et puis je pourrais le mettre à se plaindre de mode avec succès.OriginalL'auteur kerzane
Longue question pour rien... Jamais entendu parler de AppArmor, mais c'était la reasen. La réponse ici fixe. Ne se soucient pas de apparmor de l'ERREUR le profil n'existe pas.
OriginalL'auteur Lw Bi
Déplacement mysqld à "se plaindre" groupe n'était pas suffisant dans mon cas (MariaDB 10.1.21 en cours d'exécution sur Ubuntu 16.04).
J'ai dû désactiver totalement apparmor pour mysqld:
Maintenant tout fonctionne très bien.
OriginalL'auteur Vincent
Veuillez noter que depuis 10.1.10, MariaDB utilise systemd pour démarrer le service. Si vous avez essayé MYSQLD_STARTUP_TIMEOUT et il n'a pas travaillé, vous êtes probablement en utilisant ce ou une version ultérieure. Le /etc/init.d/mysql script n'est plus utilisé, donc MYSQLD_STARTUP_TIMEOUT n'a aucun effet.
Vous avez besoin de trouver votre mariadb.service fichier. Dans notre cas, il ne contient pas de délai d'attente de sorte que le MariaDB par défaut a été utilisé. Juste ajouter:
TimeoutStartSec = 0
Dans le [Service] de la section, et il ne sera jamais le temps.
Ce serait une bonne idée pour créer votre propre fichier de configuration contenant ce afin de ne pas être écrasé par plus tard, re-installe.
Sur ubuntu 18.04, vous permettra d'affiner ce fichier dans
/lib/systemd/system/mariadb.service
Mettre votre propre fichier dans
/etc/systemd/system/mariadb.service.d
N'oubliez pas d'exécuter systemctl démon-recharger après l'ajout du délai d'attente quelque part (et peut-être vérifier dans /var/log/syslog pour voir si le rechargement a été un succès), sinon votre temps sera ignoré.
OriginalL'auteur Dave Hindle
Dans le cas où vous êtes mordu par ce bug, la solution est donnée comme une suggestion dans le rapport de bug:
echo "/usr/sbin/mysqld { }" > /etc/apparmor.d/usr.sbin.mysqld
apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld
systemctl restart mariadb
Fond
Si vous avez déjà eu MySQL installé, qu'il a activé un profil AppArmor qui est incompatible avec MariaDB.
apt-get remove --purge
supprime uniquement le profil, mais ne pas désactiver/décharger. Uniquement manuellement le déchargement, il permet de MariaDB travail librement par AppArmor.OriginalL'auteur quazgar
Exécutez les commandes suivantes:
OriginalL'auteur Mahbub
Cette dernière option a fonctionné pour moi (à partir de quazgar). J'ai Ubuntu 18.10 installé avec MariaDB 10.3.13:
J'ai dû utiliser "sudo su" pour que cela fonctionne bien.
OriginalL'auteur Gert Kruger
C'est ce qui a fonctionné pour moi:
Source: https://askubuntu.com/a/964928/106100
OriginalL'auteur Meetai.com