actualización 16.04 rompió el servidor mysql

111

Mi actualización general fue bien, pero me queda un problema críticamente persistente de que mysql-server no pueda instalarse a sí mismo, y nada de lo que estoy tratando lo hace funcionar.

Este es el error que veo al intentar instalarlo / reinstalarlo:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

He intentado eliminarlo por completo, aunque al hacerlo intento instalar MariaDB debido a las dependencias (?). Cualquier sugerencia sobre lo que puedo hacer para solucionar esto sería muy bienvenida.

EDITAR: Parece que no soy el único: enlace

    
pregunta TheGremlyn 22.04.2016 - 19:53

8 respuestas

111

Las instrucciones @ andrew-beerman publicadas están en el camino correcto, aunque no son del todo claras para mí y parecen recomendar más de lo necesario. Reformé la respuesta de lo anterior y una publicación útil en el hilo del error.

Estos son los pasos que tomé para corregir esto:

  1. Haga una copia de seguridad de su my.cnf file en /etc/mysql y elimínelo o cambie el nombre

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Elimina la carpeta /etc/mysql/mysql.conf.d/ usando

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Comprueba que no tienes un archivo my.cnf escondido en otro lugar (lo hice en mi directorio de inicio) o en /etc/alternatives/my.cnf use

    sudo find / -name my.cnf
    
  4. Haz una copia de seguridad y elimina los archivos /etc/mysql/debian.cnf (no estoy seguro si es necesario, pero por las dudas)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. En caso de que su syslog muestre un error como "mysqld: No se puede leer el directorio de '/etc/mysql/conf.d/'" cree un enlace simbólico:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    Entonces el servicio debería poder comenzar con sudo service mysql start .

¡Eso funcionó!

    
respondido por el TheGremlyn 25.04.2016 - 15:38
54

Hoy tuve el mismo problema, después de probar muchas soluciones, encontré que el problema era el comando sudo systemctl disable mysql.service que utilicé para deshabilitar el inicio automático de MySQL, así que para que funcione vuelva a habilitar el servidor MySQL usando el comando sudo systemctl enable mysql.service y ejecutar nuevamente el proceso de actualización y finalizó perfectamente.

    
respondido por el Naruto Biju Mode 26.04.2016 - 00:37
17

Las instrucciones aquí lo arreglaron en mi servidor: enlace

  

Puedo entender el dolor de tener su sistema en estado inconsistente   pero no nos preocupemos por toda la situación y la tomamos paso a paso   para limpiar el sistema.

     

Primero veamos el estado actual de todos los paquetes de mysql en la máquina   usando: dpkg -l | grep mysql (pegue el resultado excluyendo el último   columna)

     

La primera columna indica el estado actual del paquete. Aquí están   las posibles opciones:

     

ii) rc instalado) Se guardan los archivos de configuración guardados (este debería ser el estado   de todos los paquetes que ha eliminado con 'apt-get remove' que no   no eliminar los archivos de configuración en / etc)

     

Para que esto funcione, necesitarás ejecutar 'apt-get purge' hasta   no ve ningún paquete en la lista anterior.

     

Recuerde que algunos paquetes que no son de servidor mysql como   python-mysql.connector y python-mysqldb, si están instalados, no necesitan ser   eliminado ya que no tienen ningún efecto sobre esta situación, pero si   eliminado puede causar problemas a las aplicaciones que los utilizan.

     

Definitivamente intentaremos volver a visitar nuestros documentos para ver cómo podemos   salvaguardar a los usuarios de meterse en este problema. Gracias por compartir   sus comentarios en detalle con nosotros.

    
respondido por el Andrew Beeman 23.04.2016 - 00:05
17

Su mensaje de error contiene esta línea:

subprocess installed post-installation script returned error exit status 1

Sin embargo, este installed post-installation script no se menciona por su nombre. Después de muchas modificaciones, descubrí que su nombre es (en mi caso) /var/lib/dpkg/info/mysql-server-5.7.postinst .

Abra este archivo con sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst o su editor preferido.

En la parte superior, cambie la línea 3 (más o menos): set -e a set -x , guarde el archivo. (La opción -e es "salir de errores", -x significa "mostrar explícitamente el comando ejecutado", presumiblemente)

Ejecutar sudo dpkg --configure -a --log /tmp/dpkg.log (la opción --log es opcional). También puede ejecutar apt upgrade si sabe que será el único paquete que se actualizará.

Ahora obtienes un resultado detallado del script mysql-server-5.7.postinst bash, y puedes descubrir qué sucede.

En mi caso intentó sin éxito (re) ejecutar mysql_upgrade , pero eso no fue necesario para mi instalación personalizada de mysql. Estaba seguro de que lo había ejecutado manualmente antes, con éxito, y todo estaba bien.

Así que commmenté la línea 321 (para versiones anteriores de mysqld prueba la línea 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

y el comando que falló anteriormente, sudo apt upgrade (lo volvió a ejecutar), finalizó correctamente y dpkg eliminó el estado de error para este paquete.

Ahora puedes retroceder el set -x a set -e (mencionado anteriormente). Y, opcionalmente, elimine el comentario de la línea mysql-upgrade.

Es posible que requiera trabajo adicional si ha movido su partición de datos mysql a una ubicación no estándar. Moví el mío de /var/lib/mysql/data a una unidad diferente a través de enlace simbólico. Entonces es posible que tenga que eliminar temporalmente el enlace simbólico, antes de la manipulación del script postinst . A continuación, vuelva a crearlo después de ejecutar la actualización del paquete.

Después de la próxima actualización de versión menor del paquete mysqld debian, este problema con el script /var/lib/dpkg/info/mysql-server-5.7.postinst puede volver a aparecer.

    
respondido por el knb 01.07.2016 - 14:03
3

En mi caso, con strace, vi que / var / run / mysqld / no existía y mysqld no puede crear el archivo mysqld.sock.

Estos comandos resolvieron mi problema:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Ahora:

systemctl start mysql

Y mysql funciona de nuevo:)

    
respondido por el Leonardo Catalinas 27.04.2016 - 10:14
3

En mi caso, pude resolver el problema agregando

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

a /etc/apparmor.d/local/usr.sbin.mysqld

Para obtener más detalles, eche un vistazo a mi responde (por ChristophS) en stackoverflow.

    
respondido por el ChristophS 29.04.2016 - 14:30
1

Ninguna de las respuestas en esta página funcionó para mí.

Terminé yendo a la página de descargas de Oracle , descargando mysql-apt-config_0.8.8-1_all.deb e instalando MySQL desde el repositorio de Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
    
respondido por el ostrokach 25.09.2017 - 19:19
0

Tuve el mismo problema. Intenté volver a instalar mysql varias veces, pero no tuve éxito.

Descubrí que el problema para mí era que otro proceso de MySQL ya se estaba ejecutando.

En detalles:

Después de leer cuidadosamente, me registro en /var/log/mysql/error.log y encontré:

  

[ERROR] No se puede iniciar el servidor: enlace en el puerto TCP / IP: dirección ya en   usar

     

[ERROR] ¿Ya tiene otro servidor mysqld ejecutándose en el puerto?   3306?

Parece que otra aplicación ya estaba usando el puerto.

Lo comprobé usando ps -aux | grep 3306 :

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

Y maté el proceso en ejecución sudo kill -15 14706

Luego comencé mysql: /etc/init.d/mysql start

¡Finalmente, mysql funciona para mí! Espero que ayude a alguien.

    
respondido por el milkovsky 20.08.2016 - 22:02

Lea otras preguntas en las etiquetas