No se puede reinstalar mysql-server después de su purga

29

Recientemente hice una nueva instalación de Ubuntu 16.04. También instalé mysql-servery mysql-client(su versión predeterminada 5.7.12) a través de apt-get install.

Debido a que 5.7.12 mostraba algunos problemas, decidí desinstalarlo. Lo intenté apt-get remove mysql-server mysql-clientprimero pero vi que a los artefactos les gustaba /etc/mysqly /var/lib/mysqlno me los quitaban.

Entonces lo intenté apt-get --purge removed mysql-server mysql-client, pero aún no hay diferencia.

Entonces, los eliminé manualmente (a través de rm -rf). También eliminé manualmente todos los *mysql*archivos /usr/que vinieron de cualquier mysql-*paquete de dependencia como mysql-common.

Sin embargo, ahora, cuando deseo volver a instalar mysql-server and -client, descubro que no puedo.

De hecho, ¡ahora estoy en un estado donde no puedo apt-get remove mysql-serverni apt-get install mysql-server!

¿Cómo soluciono la situación en la que estoy? Si mis metadatos del repositorio de paquetes local se han dañado, ¿cómo lo reparo?

Odiaría reinstalar todo el SO bendito con todas mis otras aplicaciones y entorno, una vez más solo por eso mysql-server.

El siguiente, por ejemplo, es el error que obtengo cuando intento eliminar mysql-server:

$ apt-get remove  mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  mysql-server
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 159 kB disk space will be freed.
Do you want to continue? [Y/n] 
(Reading database ... 237601 files and directories currently installed.)
Removing mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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
Errors were encountered while processing:
 mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)

Y cuando intento instalar, me sale este error:

$ apt-get -f install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mysql-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/10.1 kB of archives.
After this operation, 159 kB of additional disk space will be used.
Selecting previously unselected package mysql-server.
(Reading database ... 237599 files and directories currently installed.)
Preparing to unpack .../mysql-server_5.7.12-0ubuntu1_all.deb ...
Unpacking mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Aquí está la salida de apt-get install -f:

$ apt-get install -f 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
Acosar
fuente
Parece que mysql-server-5.7está en mal estado, intente volver a instalarlo: sudo apt-get install --reinstall mysql-server-5.7.
fkraiem
No hay diferencia, obtengo la misma línea de error: ... invoke-rc.d: initscript mysql, action "start" failed. ...que obtengo con otros tipos de comandos de instalación.
Harry
Tratar de eliminarlo, entonces ... sudo apt-get remove --purge mysql-server-5.7. Tenga en cuenta que esto es realmente de lo mysql-server-5.7que estamos hablando, no mysql-server.
fkraiem
@Harry Muchas veces, reinicio el sistema para deshacerme de este tipo de error.
margarita
Mi problema resuelto siguiendo este mensaje
raizal EN Pregnanta

Respuestas:

80

Editado el 10 de enero de 2017 : esta es una revisión importante de esta publicación para corregir problemas graves en esta publicación.

El error de corazón

El problema es que el paquete todavía está en el sistema en un estado medio instalado y medio configurado y debe eliminarse explícitamente.

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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Lo que realmente dice es que el paquete mysql-server-5.7es una dependencia mysql-server, ya está instalado, pero no está configurado. Por lo tanto, debe purgeeliminar las migas de pan que dejó mysql-server-5.7.

sudo apt purge mysql-server mysql-server-5.7

Razón fundamental

Cuando instala el software usando apt, también maneja automáticamente las dependencias por usted.

Cuando elimina ciertos paquetes, es posible que no maneje esas mismas dependencias. En el caso de esta publicación, esa dependencia es mysql-server-5.7.

Puede verificar para ver el estado de un paquete emitiendo el siguiente comando.

dpkg-query -l [package-name-here]

Por lo general, si ve el código uno rca la izquierda del nombre del paquete, podrá saber si en realidad es un paquete roto.

Cuando experimenté este problema, fue con libapache2-mod-phpy libapache2-mod-php7.0. Esta fue mi salida.

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-============================================================
un  libapache2-mod-php          <none>             <none>             (no description available)

En mi caso, afirmó que el estado de mi paquete es desconocido y que no está instalado (el código un) en mi sistema.

Cuando le dices apta removealgo, que puede dejar paquetes, archivos de configuración y otros artículos que pueden ser problemáticos durante las instalaciones automatizadas.

Cuando le dices apta purgealgo que hace, lo mejor es eliminar las migas de pan que removepuedan haber quedado atrás.

Originalmente dije que asumí que el proceso todavía se estaba ejecutando, pero lo más probable es que estuviera inactivo o muerto.

La mejor manera de verificar si el servicio está interfiriendo con la eliminación de su paquete es verificar primero ese servicio.

1) Investigar el mysqlservicio

Usando el error del sistema que nos dio apt, podemos usarlo systemctlpara investigar el error al verificar el estado del mysqlservicio

sudo systemctl status [pattern]

En nuestro caso, queremos ver si mysql se está ejecutando, así que podemos escribir

systemctl status mysql.service

Debería ver esta salida si el servicio se está ejecutando

systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-01-10 23:10:06 EST; 1h 3min ago
 Main PID: 1206 (mysqld)
   CGroup: /system.slice/mysql.service
           └─1206 /usr/sbin/mysqld

nota: si el servicio está inactivo, verá un breve mensaje que indica que no hay ningún servicio con ese nombre ejecutándose y luego vaya al paso 3.

2) Detener el mysqlservicio usandosystemctl

nota: [patrón] debe ser el nombre listado por serviceo initctl. La razón que uso patternes porque systemctlusa la coincidencia de expresiones regulares, así que tenga cuidado si debe usar el killargumento.

sudo systemctl stop [pattern]

donde patternrepresenta el demonio mysql / nombre del servicio. si parar no funciona intente

sudo systemctl kill [pattern]

Por ejemplo

sudo systemctl stop mysql

3) Desinstalar / purgar mysql

Si necesita purgar totalmente, asegúrese de que el servicio o proceso se detenga primero y luego asegúrese de eliminar los archivos y directorios correctos.

Nota: Asegúrese de estar apuntando a la mysqlversión correcta . Por ejemplo, si usa 5.5, ajuste el número de versión adecuadamente.

ADVERTENCIA: ¡ los siguientes pasos eliminarán sus datos! (el primer comando debe ejecutarse para hacer una copia de seguridad)

fuente: ¿Cómo desinstalo MySQL?

tar -zcvf ~/msql_backup.tar.gz /etc/mysql /var/lib/mysql 
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
sudo rm -rfv /etc/mysql /var/lib/mysql
sudo apt autoremove
sudo apt autoclean

4) Reparación de paquetes rotos y manejo de dependencias faltantes

Si los pasos anteriores no funcionaron para usted, es posible que deba ejecutar aptla --fix-brokenopción para reparar cualquier daño causado.

Asegúrese de apt updateprimero y luegoapt install

sudo apt update    
sudo apt install mysql-server mysql-client --fix-broken --fix-missing

5) Cuando todo lo demás falla, construye e instálalo mysqltú mismo

Si nada de lo anterior funciona, tendrá que descargar manualmente la fuente, compilar y usar make o bash para instalar desde allí (no es tan doloroso como parece, ya que todo está automatizado).

David Foerster
fuente
"16.04 está plagado de muchos errores en este momento". Funciona para mí, incluido MySQL. Me parece que la mayoría de los problemas que vemos aquí surgen de personas que hacen algo mal, como intentar rmarchivos que pertenecen a paquetes.
fkraiem
1
Excelente trabajo amigo! gracias. Perdí todo el día usando algunas estúpidas instrucciones. Ahora esto funcionó!
Renjith VR
He seguido tus instrucciones y sudo systemctl stop mysql parecía funcionar. Sin embargo, después de reiniciar, se rompió nuevamente. iniciar o detener no funciona. sudo systemctl status mysql muestra: Activo: desactivado (stop-sigterm) desde Mon 2016-06-27 11:05:22 BST; Hace 8 minutos ¿REALMENTE tengo que esperar 10 minutos para que mysql se detenga? ¿No te sorprende que la gente purgue un servicio que no se detuvo por completo? ¿Es posible que Ubuntu 16.04 lo arregle? ¿Cuáles son las opciones, volviendo a la versión anterior de LTS u otra distribución?
ruby_object
¡Gracias eliminar y reinstalar de esta manera funcionó perfectamente!
Louwki
55
nota: sudo rm -rf /var/lib/mysqleliminará todas sus bases de datos en la ubicación predeterminada. ¡Haz una copia de seguridad primero!
agosto
7

El problema con la primera publicación es que no puede reconfigurar bien un metapaquete, no para los elementos sql. Debe especificar el elemento de lanzamiento actual.

Decir uso;

apt search mysql-server

Eso debería mostrar una lista de paquetes a saber

"mysql-server-5.7" "mysql-server-core-5.7" o versiones posteriores

luego;

dpkg-reconfigure --force mysql-server-5.7 mysql-server-core-5.7

hecho.

e8hffff
fuente
4

Esta es la solución correcta para ti

Primero, tendrá que eliminar todos los paquetes de mysql-server:

ADVERTENCIA: ¡los siguientes pasos eliminarán sus datos! ¡Haz una copia de seguridad primero!

sudo rm -rf /var/lib/mysql

Luego instale:

sudo apt-get install lamp-server^

O puedes hacer:

sudo apt-get install mysql-server
Rohan
fuente
0

yo vi esto

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.

como una pista de que todavía existía un script de inicio erróneo.

Busque /etc/init.d/mysqly cualquier enlace simbólico a él. Eliminarlos pareció solucionar mis problemas de reinstalación después de la purga.

ghatzhat
fuente
0

Este error también ocurrió al cambiar de MySQL a MariaDB ( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 ).

Los archivos de datos binarios de MySQL no eran compatibles con MariaDB, así que volví a MySQL porque no tuve tiempo de meterme con mysqldump.

Primero tuve que alejar los datos de MariaDB /var/lib/mysql, luego instalar MySQL y luego mover mis datos originales /var/lib/mysql-5.7(esta copia de seguridad se creó automáticamente antes del error) a /var/lib/mysql.

Baptx
fuente
-2

¡Intente apt-get -f installarreglar su paquete SQL roto y si todavía tiene problemas con el administrador de paquetes, descargue el código fuente del servidor SQL y compílelo! Pero pruebe el comando anterior y también use dpkg -l | grep sqlpara descubrir que el administrador de paquetes aún cree que es SQL o no ...

Ali Ghasempour
fuente
No funcionó. También he incluido el error que obtengo al intentar instalar el paquete.
Harry
@Harry Debe ejecutarse apt-get -f installsolo, sin especificar un nombre de paquete.
fkraiem
Como dijo fkraim, úsalo sin el nombre del paquete ...
Ali Ghasempour
Se agregó la salida de apt-get install -f, sin cambios.
Harry
Trate de solicitud sináptica y se les dice que no hay paquete roto o no (en la columna de la izquierda) [si tiene escritorio]
Ali Ghasempour