Systemd Mysql no se detendrá

17

Después de actualizar a 15.04, me he divertido mucho conociendo systemd. Creo que tengo todo funcionando, excepto que no puedo detener mysql.service; el comando systemctl simplemente se cuelga y mysql simplemente sigue ejecutándose. ¿Alguien más ha experimentado esto o podría saber lo que está pasando?

Craig Dunford
fuente
2
Por defecto, ataca el servicio con SIGKILL después de 3 minutos (si el servicio no finaliza normalmente). Probablemente tendrá que leer las configuraciones de mysql.service.
Velkan
2
¿Qué versión de MySQL está ejecutando? ¿Usaste su mysql.servicescript nativo o rodaste el tuyo?
Jos
Es el 5.6 que sale del vívido repositorio oficial. Estoy usando el script que viene con ese paquete.
Craig Dunford,
Tuvimos el mismo problema y presentamos un informe de error .
Equipo EOLE

Respuestas:

25

Tuve el mismo problema (actualizar a 15.04, usando archivos oficiales y configuración).

Tuve que hacer los siguientes cambios para poder detener el mysqldaemon manualmente sytemctly automáticamente al reiniciar / apagar el sistema:

  1. Hacer /etc/mysql/debian.cnflegible para el mysqlusuario con

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Proporcione un mysql.servicearchivo ligeramente modificado :

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. Proporcione un comando de detención explícito abriendo el archivo copiado en un editor:

    sudo nano /etc/systemd/system/mysql.service
    

    y agregando la siguiente línea debajo de la [Service]sección:

    ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
    

    En Nano, use Ctrl + O para guardar (¡modo Linux!), Ctrl + X para salir.

  4. Haga que el nuevo archivo de servicio sea conocido por el sistema:

    sudo systemctl daemon-reload
    
Tú haces
fuente
Mi Kubuntu comenzó a congelarse durante el apagado con un trabajo de detención en ejecución para MySQL Community Server [1min 16s / 10min] . Esta respuesta resolvió el problema, muchas gracias.
lolmaus - Andrey Mikhaylov
Mi actualización 14.10 -> 15.04 (que movió MySQL 5.5 a 5.6) causó el mismo problema. Aunque MySQL 'funciona', no se cierra correctamente, por lo que Ubuntu se bloquea al apagarse. Parece que el problema se relaciona con el cambio de versión de MySQL combinado con el reemplazo de systemd upstart. Este enlace cubre algunas de las actualizaciones de la configuración de MySQL para ordenar advertencias, etc. Al iniciar MySQL también siempre se queja de un apagado incorrecto, ya que systemd simplemente mata el proceso después de 10 minutos, si puede esperar tanto tiempo.
Mike
1
Mismo problema en Debian Jessie / Pruebas con MySQL 5.6 - solucionado gracias a usted :)
Majenko
Odio tener que hacer esto, pero estoy muy contento de que funcione, ¡gracias Udo!
Gabriel Baker
No resolvió el problema en LinuxMint 18.
sivaprasadreddy.k
1

Tuve el mismo problema con Ubuntu 15.10 Desktop y encontré la forma de solucionarlo:

El parámetro log_error en /etc/mysql/mysql.conf.d/mysqld.cnf fue comentado. Después de descomentar el parámetro, systemd se apaga mysqld sin problemas.

mikko356
fuente
Tuve el mismo problema en Ubuntu LTS 16.04. Solo la desactivación del error.log funcionaba. Ahora mysqld escribe a través de la --log-syslogopción al diario. Tal vez una razón: el sistema de archivos raíz era btrfs.
ingopingo
1

Su problema es thread_pool_size. Si es mucho más alto que el número de núcleos / subprocesos, no podrá cerrar correctamente a menos que use el comando de cierre mysqladmin.

Por ejemplo: tienes 2 núcleos de CPU con 4 hilos. Si lo configura 1-4, funcionará bien. Si lo configura en 16, como se recomienda en muchos blogs de 'alto rendimiento', se acumulará.

Drakula963
fuente
1

Tuve un problema similar con mysql / mariadb que no se detuvo cuando se lo indicó systemd , ya sea en apagado o llamado manualmente con sudo service mysql stop.

En mi caso, utilizo Ubuntu / Windows con arranque dual en modo UEFI, y estos sistemas operativos interpretan diferentes tiempos de hardware, por lo que ambos sistemas operativos se sincronizan con los servidores de tiempo de Internet cuando se inician.

MySQL (y Mariadb) no se detenían si el tiempo del hardware cambiaba mientras se ejecutaba.

Debe aplazar el inicio de MySQL hasta después de la sincronización temporal. Idealmente, esto se haría insertando una dependencia temporal en mysql, After: time-syncpero eso no funcionó para mí.

La solución que funcionó para mí (puede reemplazar mysql con mariadb para el mismo efecto):

  1. Deshabilitar mysql con sudo systemctl disabled mysql.service

  2. Cree un script (asegúrese de que sea ejecutable) que iniciará mysql después de un retraso /usr/bin/delay_mysqlcon el contenido:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Cree un servicio systemd para ejecutar su nuevo script /etc/systemd/system/delay_mysql.service con contenido:

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. Registre su nuevo servicio con sudo systemctl enable delay_mysql.service

Esto hará que su script se ejecute en niveles multiusuario, que en Ubuntu son 3,4,5.

Día cero
fuente
Se solucionó mi problema. Sin embargo, es muy importante tener en cuenta que antes de reinstalar MySql debe deshabilitar delay_mysql.service, de lo contrario, obtendrá un error.
SiGe
0

Justo al copiar mysql.servicetendrás que hacer un chmoddespués.

cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service
Martín
fuente
0

en mi caso, la contraseña no coincidía para el usuario de mantenimiento debian-sys-maintentre uno en /etc/mysql/debian.cnfuno en la base de datos MySQL.

Este usuario se utiliza para el apagado de MySQL y otras funciones. Después de la actualización de MySQL, puede ocurrir que haya una falta de coincidencia entre el archivo y la base de datos. Esto también podría suceder si mueve su base de datos de un MySQL a otro. Si va a importar todas las bases de datos y usuarios de otro MySQL en una máquina diferente, debe volver a sincronizar su debian-sys-maintcontraseña de usuario ( ) de mantenimiento .

Debe hacer: verificar su contraseña actual en el archivo ubuntu / debian:

sudo cat /etc/mysql/debian.cnf

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Puede ver su contraseña que el sistema usará aquí: password = n4aSHUP04s1J32X5

El siguiente paso es actualizar MySQL a la misma contraseña: Inicie sesión en MySQL:

~$ mysql -u root -p

Escriba su contraseña para acceder a MySQL

mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';**

Después de eso, no hay más problemas con el apagado, no hay 10 minutos de espera, no hay problemas con la instalación de aplicaciones que usan esta cuenta de mantenimiento como phpmyadmin.

ACTUALIZACIÓN: Lamentablemente, esto no resolvió el problema. Lo hizo un poco aleatorio: a veces puedo detener el servicio sin problemas, otra vez se congelará al detener el servicio.

Patryk
fuente