La actualización 16.04 rompió el servidor mysql

Mi actualización general funcionó bien, pero me queda un problema críticamente persistente de que mysql-server no puede instalarse por sí solo, y nada de lo que estoy intentando hace que funcione.

Este es el error que veo cuando bash 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 intentar instalar MariaDB debido a dependencias (?). Cualquier sugerencia sobre lo que puedo hacer para solucionar esto sería muy bienvenida.

EDITAR: Parece que no soy el único: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279

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

Estos son los pasos que tomé para corregir esto:

  1. Haga una my.cnf file seguridad de su my.cnf file en /etc/mysql y elimínelo o renómbrelo

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

     sudo rm -r /etc/mysql/mysql.conf.d/ 
  3. Verifique que no tenga un archivo my.cnf escondido en otra parte (¡lo hice en el directorio de mi casa!) O en el uso de /etc/alternatives/my.cnf

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

     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 lo hizo funcionar!

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

Las instrucciones aquí lo arreglaron en mi servidor: https://bugs.mysql.com/bug.php?id=72722

Puedo entender el dolor de tener su sistema en un estado inconsistente, pero no nos preocupemos por la situación en su conjunto y hagámoslo paso a paso para limpiar el sistema.

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

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

ii) rc instalado) Se eliminaron los archivos de configuración (este debe ser el estado de todos los paquetes que eliminó con ‘apt-get remove’ que no elimina los archivos de configuración en / etc)

Para que esto funcione, deberá ejecutar ‘apt-get purge’ hasta que no vea ningún paquete en la lista anterior.

Recuerde que algunos paquetes que no sean de mysql-server como python-mysql.connector y python-mysqldb, si están instalados, no deben eliminarse ya que no tienen ningún efecto en esta situación, pero si se eliminan pueden causar problemas a las aplicaciones que los utilizan.

Definitivamente, intentaremos volver a visitar nuestros documentos para ver cómo podemos evitar que los usuarios se metan en este problema. Gracias por compartir sus comentarios en detalle con nosotros.

Su mensaje de error contiene esta línea:

 subprocess installed post-installation script returned error exit status 1 

Sin embargo, esta installed post-installation script no se menciona por su nombre. Después de muchos retoques, 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 para set -x , guarde el archivo. (la opción -e es “salir en errores”, -x significa “mostrar explícitamente el comando ejecutado”, probablemente)

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

Ahora obtiene una salida detallada de la mysql-server-5.7.postinst comandos bash mysql-server-5.7.postinst , y puede descubrir qué es lo que está mal.

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.

Entonces comenté la línea 321 (para versiones anteriores de mysqld, intente con la línea 281),

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

y el comando que ha fallado anteriormente, sudo apt upgrade (ejecútelo de nuevo), finalizó con éxito y dpkg eliminó el estado de error de este paquete.

Ahora puede volver a establecer el set -x para set -e (mencionado anteriormente). Y opcionalmente descomprime la línea de actualización de mysql.

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

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

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 🙂

En mi caso podría solucionar el problema añadiendo

 # 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, consulte mi respuesta (por ChristophS) en stackoverflow.

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 repository de Oracle:

 sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb sudo apt update sudo apt install mysql-server 

Tuve el mismo problema. Intenté reinstalar mysql varias veces, pero no tuve éxito.

Me di cuenta de que el problema para mí era que ya se estaba ejecutando otro proceso mysql.

En detalles:

Después de leer cuidadosamente, /var/log/mysql/error.log sesión en /var/log/mysql/error.log , y encontré:

[ERROR] No se puede iniciar el servidor: Enlace en el puerto TCP / IP: la dirección ya está en uso

[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 :

 $ 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

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

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