apt-get se bloquea al actualizar mysql-server-5.1

9

Cuando intento hacer lo siguiente:

sudo apt-get update
sudo apt-get upgrade

en mi instalación de Ubuntu Server 10.04, se cuelga en la siguiente línea:

Preparing to replace mysql-server-5.1 5.1.41-3ubuntu12.1 (using .../mysql-server-5.1_5.1.41-3ubuntu12.3_i386.deb)

¡Ni siquiera puedo sacar CTRL-C! Termino teniendo que cerrar mi sesión e iniciar sesión desde una terminal diferente y el proceso de actualización aún se está ejecutando. Lo he reiniciado varias veces y cuando vuelvo e intento nuevamente me dice:

E: dpkg was interrupted, you must manually run 'sudo --configure -a' to correct the problem.

Una vez que hago eso, vuelvo al punto de partida y se congela cuando intento actualizar mySQL.

Robar
fuente
1
y, este sería usted también ... newyork.ubuntuforums.org/showthread.php?t=1514195
nik
2
@nik: y? ¿No debería hacer una pregunta en dos lugares? Es bueno publicar en dos lugares? ¿Estás demostrando que sabes cómo usar Google?
msw
2
@msw, no fue un comentario negativo o un alarde. De hecho, pensé que encontré otra referencia a un problema similar ... pero resultó que no era así.
nik
@msw: La publicación cruzada es ... controvertida. Por supuesto, maximiza la posibilidad de que obtenga una respuesta, pero también habrá diferentes 'equipos' trabajando en lo mismo, probablemente presentando las mismas sugerencias y simplemente perdiendo el tiempo.
Bobby
La razón por la que publiqué aquí fue porque no recibo una sola respuesta en ubuntuforums.org. No hace falta decir que no los usaré como un recurso tecnológico de ahora en adelante :)
Rob

Respuestas:

2

Intente ir un nivel por debajo de apt, después de hacer una copia de seguridad de sus bases de datos:

sudo dpkg -r mysql-server
sudo apt-get check    # verify that apt's metadata is okay
sudo apt-get install mysql-server

añadido :

Dado que se dpkg -restá ahogando, intente dpkg --purgey no logre obtener el contenido del paquete con el efecto dpkg -L mysql-server-5.1y luego muckear /var/lib/dpkg.

Nunca he visto que las cosas se pongan tan peludas, lo siento.

si al principio no tienes éxito

Estoy pensando en voz alta aquí, perdóname. El metapaquete mysql-server contiene o requiere estos paquetes:

libdbd-mysql-perl
libdbi-perl
libhtml-template-perl
libnet-daemon-perl
libplrpc-perl
mysql-client-5.1
mysql-client-core-5.1
mysql-server
mysql-server-5.1
mysql-server-core-5.1

Los metadatos para la gestión de paquetes están deliciosamente desacoplados, hay repositorios centrales pero los paquetes son independientes. /var/cache/apt/archiveses donde viven los *.debarchivos que se han instalado.

Primero, obligue a dpkg a olvidarse de estos paquetes (a riesgo de no eliminar algunos archivos que de todos modos vamos a reemplazar).

for i in mysql-server-core-5.1 mysql-server-5.1 ... ; do
    sudo dpkg -r --force-remove-reinstreq $i
done

Luego obtenga los archivos .deb necesarios para una instalación completa:

sudo apt-get install --download-only mysql-server

y luego intente instalarlos uno por uno:

cd /var/cache/apt/archives
sudo dpkg -i mysql-server-core-5.1_5.1.41-3ubuntu12.3_i386.deb

Si tiene problemas allí, intente:

sudo dpkg -D77777 -i mysql-server-core-5.1... > 2>&1 /tmp/dpkg.log.$$

E intente encontrar las líneas relevantes del trillón en el archivo de registro y publíquelas aquí. Buena suerte y buena suerte.

msw
fuente
Cuando hago "dpkg -r mysql-server" dice que no está instalado. Entonces pruebo "dpkg -r mysql-server-5.1" y dice: El paquete está en un estado inconsistente muy malo; debe reinstalarlo antes de intentar una eliminación.
Rob
¿Supongo que probaste "dpkg -r mysql-server-5.1" y fallaste?
msw
Si falla. Reconoce que está allí, pero dice "El paquete está en un estado inconsistente muy malo; debe reinstalarlo antes de intentar una eliminación".
Rob
"dpkg --purge" da el mismo error. Entonces, ¿debería eliminar todos los archivos enumerados con "dpkg -L mysql-server-5.1"? ¿Y qué quieres decir con "muck" sobre in / var / lib / dpkg?
Rob
siguiente fase
añadida
6

Aparentemente, la actualización está esperando que el servidor se inicie y por alguna razón no lo hace. Para solucionar el problema hay varias posibilidades.

Lo más fácil:

  1. Abra una nueva terminal y ejecute:

    sudo services mysql start
    

Más complicado pero a veces necesario: (esto es útil cuando no tiene acceso a otra terminal):

  1. Presione "^ z" ( Ctrl+ Z) que "DETENDRÁ" su trabajo. Entonces corre:

    sudo services mysql start
    
  2. Una vez que se inicia el servidor, escriba lo siguiente y presione Entrar:

    fg 
    

    Esto colocará su trabajo "DETENIDO" nuevamente en primer plano y continuará donde lo dejó.

Mate
fuente
En mi caso, estaba esperando que el servidor se iniciara.
izak
Aunque el comando de inicio dijo que ya se estaba ejecutando, dentro de unos segundos apt-get continuó bien. Gracias
Liam Wheldon
2

Tenía este problema porque era una copia de una máquina virtual, así que había cambiado la dirección IP del servidor pero no había cambiado la dirección de enlace en el archivo my.cnf. Una vez que cambié la dirección de enlace para que coincida, la actualización no se bloqueó y se completó con éxito.

Andrés
fuente
1

Me enfrenté al mismo problema y pasé más de un día depurándolo.

Cuando eliminé el directorio de la base de datos /var/lib/mysql/, la instalación se realizó sin problemas.

Puru Choudhary
fuente
2
Sin embargo, eso debe hacerse con precaución, ¿verdad?
slhck
1

Estaba teniendo este problema exacto, pero ninguna de las soluciones existentes parecía apropiada. Se supone que forzar una desinstalación es innecesario en cualquier * nix y definitivamente no es KISS. En mi caso, descubrí que la causa era simple. ¡MySQL se negaba a comenzar porque todavía se estaba ejecutando! Cuando apt intentó detener MySQL, estaba activo y nunca se detuvo.

Como siempre, ¡asegúrese de tener copias de seguridad!

Detener el servicio:

sudo service mysql stop

Asegúrese de que el servicio ya no se esté ejecutando:

sudo ps ax | grep mysql

Si aún se está ejecutando, dale algo de tiempo:

sudo kill <pid>

Pero eventualmente, si aún se está ejecutando, debes matarlo agresivamente:

sudo kill -9 <pid>

Una vez que haya confirmado que ya no se está ejecutando, puede continuar con la actualización.

Una vez completada la actualización, especialmente si tuvo que eliminar -9, asegúrese de ejecutar mysqlcheck para asegurarse de que lo que sea que haya causado que el servicio no se detenga no es una tabla dañada o rota. También asegúrese de tener copias de seguridad periódicas (¡y asegúrese de que esas copias de seguridad realmente funcionen!).

zaTricky
fuente
0

En mi caso hubo un problema con un /etc/mysql/my.cnf existente. Al comprobar el registro de error en /var/log/mysql/error.log se reveló:

150112  5:45:47 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
150112  5:45:47 [ERROR] Do you already have another mysqld server running on port: 3306 ?
150112  5:45:47 [ERROR] Aborting

150112  5:45:47  InnoDB: Starting shutdown...
150112  5:45:52  InnoDB: Shutdown completed; log sequence number 0 1883376705
150112  5:45:52 [Note] /usr/sbin/mysqld: Shutdown complete

Obviamente, podría haber un problema diferente con my.cnf, pero en mi caso fue que estábamos tratando de vincularnos a una antigua dirección IP. Cambiando a:

bind 127.0.0.1

solucionó eso y comenzó sin problemas.

rainkinz
fuente