La actualización 16.04 rompió el servidor mysql

127

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

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

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

TheGremlyn
fuente
Tengo el mismo problema aquí .
KernelPanic
1
Tuve que desinstalar phpmyadmin, que estaba causando los problemas de dependencia de alguna manera. Después de reinstalar, todo vuelve a funcionar bien.
Hinrich
1
do-release-upgrade de Ubuntu 14 a 16 realiza una actualización no compatible de MySQL 5.5 a 5.7, por lo que se espera que MySQL se rompa después, como se informa aquí: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + error / ...
Marco Marsala
1
@MarcoMarsala No sé si podemos decir que se espera que MySQL se rompa después de la actualización de Ubuntu 14 a 16, aunque supongo que depende de su perspectiva. Para el usuario promedio, ciertamente no se espera que una actualización de LTS rompa algo como MySQL. Sin embargo, es sorprendente que no se haya detectado durante las pruebas.
TheGremlyn
apt install phpmyadmin --reinstall arregló lo anterior sin necesidad de tocar mysql después de ... vaya a la figura
Andy

Respuestas:

119

Las instrucciones que @ andrew-beerman publicaron están en el camino correcto, aunque no me resultan claras y parecen recomendar más de lo necesario. Reuní 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. Una copia de seguridad my.cnf fileen /etc/mysqly eliminar o cambiar el nombre

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

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Verifique que no tenga un my.cnfarchivo escondido en otro lugar (¡lo hice en mi directorio de inicio!) O en /etc/alternatives/my.cnfuso

    sudo find / -name my.cnf
    
  4. Copia de seguridad y eliminar /etc/mysql/debian.cnfarchivos (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 sudo service mysql start.

¡Eso lo hizo funcionar!

TheGremlyn
fuente
17
después de todas estas operaciones (lo hice antes) todavía tengo los mismos problemas de error ...
Serge
55
Debe eliminar cada my.cnf. * Del directorio / etc / mysql. Busque my.cnf.backup, my.cnf.fallback y my.cnf.migrated: todos estos archivos también deben eliminarse (¡primero la copia de seguridad!)
hitzi
8
@SergiiP sudo find / -name "my.cnf"podría ser útil.
starbeamrainbowlabs
1
mysql-server-core- debería ser mysql-server-core-5.7. De lo contrario funcionó como un encanto. ¡Gracias!
David Tay
1
+1. ¡Me hiciste el día! ¡También mañana y tarde! Estaba atorada.
Max Yudin
56

Hoy tuve el mismo problema, después de probar muchas soluciones, descubrí que el problema era el comando sudo systemctl disable mysql.serviceque usé para deshabilitar el inicio automático de MySQL, así que para que funcione, volví a habilitar el servidor MySQL usando el comando sudo systemctl enable mysql.servicey ejecuté nuevamente el proceso de actualización y Terminó perfectamente.

Modo Naruto Biju
fuente
55
Me encontré con este mismo problema y la misma solución funcionó para mí.
Allen
55
Trabajó para mi. Hice todas las soluciones aquí, mysql funcionó después de esta.
Błażej Michalik
66
Lo mismo aquí: esta debería ser la publicación principal.
a1phanumeric
3
¡Trabajó para mí también! Muchas gracias. Solo para ser explícito, ejecuta: sudo systemctl enable mysql.servicey después de eso sudo apt install -f.
Fernando Paladini
Esto es todo lo que tenía que hacer. Había desactivado el inicio automático como lo describe @naruto. He activado el inicio automático y ejecuto "sudo apt upgrade". Ahora arreglado. Debería ser la mejor respuesta. Esta es una solución mucho más simple, más estándar y menos propensa a problemas.
Jack Holt
20

Su mensaje de error contiene esta línea:

subprocess installed post-installation script returned error exit status 1

Sin embargo, esto installed post-installation scriptno se menciona por su nombre. Después de mucho retocar, 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.postinsto con su editor preferido.

En la parte superior, cambie la línea 3 (más o menos): set -ea set -x, guarde el archivo. (la opción -ees "salir en caso de errores", -xsignifica "mostrar comando ejecutado explícitamente", presumiblemente)

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

Ahora obtienes resultados detallados del mysql-server-5.7.postinstscript bash, y puedes descubrir qué está mal.

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

Así que comenté 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ó antes sudo apt upgrade(ejecútelo nuevamente), finalizó con éxito y dpkg eliminó el estado de error de este paquete.

Ahora se puede retroceder el set -xque set -e(mencionado anteriormente). Y, opcionalmente, descomente la línea mysql-upgrade.

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 /var/lib/mysql/dataa una unidad diferente a través del enlace simbólico. Entonces es posible que deba eliminar el enlace simbólico temporalmente, antes de la postinstmanipulación del script. 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 menor del paquete de debian mysqld, este problema con el /var/lib/dpkg/info/mysql-server-5.7.postinstscript puede aparecer nuevamente.

knb
fuente
Terminé purgar todo y luego descargar la versión de mysql-servidor de la comunidad e instalar manualmente desde aquí: dev.mysql.com/downloads/mysql
RyanNerd
Me pasó exactamente lo mismo, y tus pasos lo resolvieron. Pero para mí, mi llamada mysql_upgrade estaba en la línea 320. ¿Puede explicar por qué devuelve un valor distinto de cero cuando se llama desde el script postinst?
emiliopedrollo
@emiliopedrollo No, no puedo explicarlo aquí. Pero creo que el número de línea ahora es 320 porque recientemente los mantenedores del paquete han aumentado el script posterior a la instalación, he observado lo mismo el otro día, durante la última ejecución del actualizador de software (que incluía un nuevo paquete mysql-deb-package) .
knb
¡Gracias! Con set -epude resolver el problema exacto: MySQL no tenía acceso para el usuario del sistema ubuntu especificado en /etc/mysql/debian.cnf . Así que agregué este usuario a MySQL y otorgué privilegios, corrí dpkgnuevamente y funcionó
Allen Hamilton
17

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 toda la situación y tómelo 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) Archivos de configuración eliminados guardados (Este debería ser el estado de todos los paquetes que ha eliminado con 'apt-get remove' que no elimina los archivos de configuración en / etc)

Para que esto funcione, deberá ejecutar 'apt-get purge <pkg-name>' hasta que no vea ningún paquete en la lista anterior.

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

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

Andrew Beeman
fuente
2
Gracias por dpkg -l | grep mysql . Me ayudó a entender la dirección.
Max Yudin
el comando estaba mal para la purga, debe ser sudo apt-get purge <pkg-name>que lo arreglé con una edición pero: utilicé caracteres unicode para el <porque de lo contrario no se mostraría. Se advirtió copia pegando este comando
Toskan
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 :)

Leonardo Catalinas
fuente
Le sugiero que agregue estas líneas a / usr / share / mysql / mysql-systemd-start a partir de la línea 25, luego no tendrá que volver a crear este directorio después de cada reinicio (lo siento, la línea devuelta no funciona en este comentario) : Si [ ! -d / run / msyqld]; entonces mkdir -p -m0755 / run / mysqld || {echo "No se puede crear / ejecutar / mysqld"; salida 1; } chown mysql: mysql / run / mysqld || {echo "No se puede ejecutar / ejecutar / mysqld"; salida 1; } fi
scoobydoo
3

En mi caso, podría 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 respuesta (por ChristophS) en stackoverflow.

ChristophS
fuente
0

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, inicie sesión /var/log/mysql/error.logy 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 revisé 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

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

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

milkovsky
fuente
0

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.debe 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
Ostrokach
fuente
2
isntall-> installerror tipográfico. Estúpido SO no me permite corregir un personaje.
Csaba Toth
¿Por qué fuiste al oráculo para descargar mysql?
Sinscary
@Sinscary Esta respuesta es de hace un tiempo, pero probablemente fue porque tenían una versión más nueva que el administrador de paquetes del sistema.
Ostrokach
0

He tenido el problema en algunos servidores ahora. La solución fue ejecutar apt install phpmyadmin --reinstall

que resolvió lo anterior (sin necesidad de tocar mysql después)

Andy
fuente