Recientemente hice una instalación nueva de Ubuntu 16.04. También instalé mysql-server
y 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-client
primero, pero vi que a los artefactos les gustaban /etc/mysql
y /var/lib/mysql
no 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-server
ni 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.7
es una dependencia de mysql-server
, ya está instalado, pero no configurado. Por lo tanto, es necesario purge
que 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 un
o rc
a 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-php
y 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.
apt
Cuando le dices remove
algo, puede dejar paquetes, archivos de configuración y otros elementos que pueden ser problemáticos durante las instalaciones automatizadas.
Cuando le cuentas apt
a purge
algo lo que hace, lo mejor es eliminar las migas de pan que remove
puedan 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 mysql
servicio
Usando el error del sistema que nos proporcionó apt
, podemos usarlo systemctl
para investigar el error verificando el estado del mysql
servicio.
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 mysql
servicio usandosystemctl
nota: [patrón] debe ser el nombre que aparece en service
o initctl
. la razón por la que lo uso pattern
es porque systemctl
usa coincidencias de expresiones regulares, así que tenga cuidado si debe usar el kill
argumento.
sudo systemctl stop [pattern]
donde pattern
representa 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 mysql
versió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 apt
la --fix-broken
opción para reparar cualquier daño causado.
Asegúrate de apt update
primero 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 mysql
usted 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
.