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

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

Recientemente hice una instalación nueva 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.

Como la versión 5.7.12 mostraba algunos problemas, decidí desinstalarla. Lo intenté apt-get remove mysql-server mysql-clientprimero, pero vi que a los artefactos les gustaban /etc/mysqly /var/lib/mysqlno se eliminaban.

Luego lo intenté apt-get --purge removed mysql-server mysql-client, pero todavía no hay diferencia.

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

Sin embargo, ahora, cuando deseo reinstalar mysql-server and -client, encuentro que no puedo.

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

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

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

El siguiente, por ejemplo, es el error que aparece 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 al intentar 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á el resultado 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)

Respuesta1

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 en el 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 de mysql-server, ya está instalado, pero no configurado. Por lo tanto, es necesario purgeque elimine las migas de pan que deja mysql-server-5.7.

sudo apt purge mysql-server mysql-server-5.7

Razón fundamental

Cuando instala software usando apt, automáticamente también maneja 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 el estado del 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 se trata de un paquete roto.

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

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 se desconoce el estado de mi paquete y que no está instalado (el código un) en mi sistema.

aptCuando le dices removealgo, puede dejar paquetes, archivos de configuración y otros elementos que pueden ser problemáticos durante las instalaciones automatizadas.

Cuando le cuentas apta purgealgo lo que hace, lo mejor es eliminar las migas de pan que removepuedan haber quedado.

Originalmente dije que asumía que el proceso aún 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 ese servicio primero.

1) Investigando el mysqlservicio

Usando el error del sistema que nos proporcionó apt, podemos usarlo systemctlpara investigar el error verificando 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 este resultado 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 mensaje corto que indica que no hay ningún servicio con ese nombre en ejecución y luego salte al paso 3.

2) Detener el mysqlservicio usandosystemctl

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

sudo systemctl stop [pattern]

donde patternrepresenta el nombre del demonio/servicio mysql. Si parar no funciona intenta

sudo systemctl kill [pattern]

Por ejemplo

sudo systemctl stop mysql

3) Desinstalar/purgarmysql

Si necesita realizar una purga total, primero asegúrese de que el servicio o proceso esté detenido y luego asegúrese de eliminar los archivos y directorios correctos.

Nota: asegúrese de apuntar 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 tus datos! (se debe ejecutar el primer comando 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) Reparar paquetes rotos y manejar dependencias faltantes

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

Asegúrate 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, constrúyalo e instálelo mysqlusted mismo

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

Respuesta2

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

Di 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

entonces;

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

hecho.

Respuesta3

Esta es la solución correcta para usted

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

ADVERTENCIA: ¡los siguientes pasos eliminarán tus 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

Respuesta4

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 tenía tiempo para meterme con mysqldump.

Primero tuve que mover 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.

información relacionada