升级mysql-server-5.1时apt-get挂起


9

当我尝试执行以下操作时:

sudo apt-get update
sudo apt-get upgrade

在我的Ubuntu Server 10.04安装上,它挂在以下行:

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

我什至无法CTRL-C!我最终不得不终止会话并从其他终端登录,升级过程仍在运行。我已经重新启动了几次,当我回头再试一次时,它告诉我:

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

一旦这样做,我就回到了第一方格,当我尝试升级mySQL时,它冻结了。



2
@nik:和?他不应该在两个地方问一个问题吗?最好在两个地方发布?显示您知道如何使用Google?
msw

2
@msw,这不是负面评论或炫耀。实际上,我以为我发现了另一个类似问题的参考..但是事实并非如此。
2010年

@msw:交叉发布有争议。当然,这最大程度地提高了您获得答案的可能性,但是也会有不同的“团队”在从事同一工作,可能会提出相同的建议而浪费时间。
鲍比(Bobby)

我在这里发布的原因是因为我在ubuntuforums.org上没有得到任何回复。不用说,从现在开始,我将不再将它们用作技术资源:)
罗布(Rob)2010年

Answers:


2

备份数据库后,尝试将其降至apt以下:

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

添加

由于dpkg -r令人窒息的尝试dpkg --purge和失败使包裹内容dpkg -L mysql-server-5.1突然破裂,然后混入/var/lib/dpkg

对不起,我从未见过这么毛茸茸的。

如果一开始你没有成功

我有点想在这里,请原谅我。mysql-server元软件包包含或需要以下软件包:

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

软件包管理的元数据令人愉快地解耦,有中央存储库,但软件包是独立的。/var/cache/apt/archives*.deb实时安装的文件的位置。

首先,迫使dpkg忘记这些软件包(冒着无法删除我们将要替换的某些文件的风险)。

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

然后获取完整安装所需的.deb文件:

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

然后尝试一一安装:

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

如果那里有问题,请尝试:

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

并尝试从日志文件中找到不计其数的相关行,并将其发布到此处。祝你好运和上帝。


当我执行“ dpkg -r mysql-server”时,它说未安装。所以我然后尝试“ dpkg -r mysql-server-5.1”,它说:软件包处于非常糟糕的不一致状态-您应在尝试删除之前重新安装它。
罗布2010年

我假设您尝试了“ dpkg -r mysql-server-5.1”并且失败了?
msw

是的,它失败了。它识别出它在那儿,但是说:“包装处于非常糟糕的不一致状态-您应在尝试移除之前重新安装它。”
罗布

“ dpkg --purge”给出相同的错误。因此,我应该只删除“ dpkg -L mysql-server-5.1”列出的所有文件吗?在/ var / lib / dpkg中,您所说的“废话”是什么意思?
罗布(Rob)2010年

添加了下一个阶段
msw 2010年

6

显然,更新正在等待服务器启动,由于某种原因,它没有启动。要解决该问题,有几种可能性。

最简单的:

  1. 打开一个新的终端,然后运行:

    sudo services mysql start
    

更复杂,但有时是必要的:(当您无法访问另一个终端时,这很方便):

  1. 按“ ^ z”(Ctrl+ Z),它将“停止”您的工作。然后运行:

    sudo services mysql start
    
  2. 服务器启动后,键入以下内容,然后按Enter:

    fg 
    

    这会将您的“已停止”作业放回前台,并从中断处继续执行。


就我而言,确实是在等待服务器启动。
izak

即使启动命令说它已经在运行,在几秒钟内apt-get仍然可以正常运行。谢谢
Liam Wheldon '18

2

我遇到这个问题是因为它是VM的副本,所以我更改了服务器的IP地址,但没有更改my.cnf文件中的绑定地址。一旦更改了绑定地址以使其匹配,更新就不会挂起并成功完成。


1

我遇到了同样的问题,花了一天多的时间调试它。

当我删除数据库目录时/var/lib/mysql/,安装顺利进行。


2
不过,应该谨慎行事,对吧?
slhck 2011年

1

我遇到了这个确切的问题,但是现有的解决方案似乎都不适合。在任何* nix中,强制卸载都是不必要的,而且绝对不是KISS。就我而言,我发现原因很简单。MySQL拒绝启动,因为它仍在运行!当apt试图停止MySQL时,它是活动的,从未真正停止过。

与往常一样,请确保您有备份!

停止服务:

sudo service mysql stop

确保该服务不再运行:

sudo ps ax | grep mysql

如果它仍在运行,请给它一些时间:

sudo kill <pid>

但是最终,如果它仍在运行,则必须大胆地杀死它:

sudo kill -9 <pid>

确认它不再运行后,您可以继续进行更新。

更新完成后,尤其是在必须终止-9的情况下,请确保运行mysqlcheck以确保可能导致服务无法停止的一切不是损坏或损坏的表。另外,请确保您具有常规备份(并确保这些备份确实有效!)。


0

就我而言,现有的/etc/mysql/my.cnf存在问题。检查/var/log/mysql/error.log中的错误日志,发现:

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

显然,my.cnf可能存在其他问题,但就我而言,是我们试图绑定到旧的IP地址。更改为:

bind 127.0.0.1

修复该问题,并且启动没有问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.