apt-get зависает при обновлении mysql-server-5.1


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?
MSS

2
@msw, это не был отрицательный комментарий или понты. На самом деле, я думал, что нашел другую ссылку на подобную проблему ... но, оказалось, не так.
Ник

@msw: кросс-постинг является ... спорным. Конечно, это максимизирует вероятность того, что вы получите ответ, но также будут разные «команды», работающие над одним и тем же, вероятно, предложат те же предложения и просто потратят свое время.
Бобби

Причина, по которой я разместил здесь, была в том, что я не получил ни одного ответа на ubuntuforums.org. Само собой разумеется, я не буду использовать их как технический ресурс отныне :)
Роб

Ответы:


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.1zap их, а затем обойти /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-сервер
mysql-сервер-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.$$

И попробуйте найти соответствующие строки из zillion в лог-файле и разместите их здесь. Удачи и бога.


Когда я делаю "dpkg -r mysql-server", он говорит, что он не установлен. Затем я пробую «dpkg -r mysql-server-5.1» и он говорит: «Пакет находится в очень плохом несовместимом состоянии - вы должны переустановить его перед попыткой удаления».
Роб

Я предполагаю, что вы пробовали "dpkg -r mysql-server-5.1" и потерпели неудачу?
MSS

Да, это не удается. Он распознает, что он есть, но говорит: «Пакет находится в очень плохом несовместимом состоянии - вы должны переустановить его перед попыткой удаления».
Роб

«dpkg --purge» выдает ту же ошибку. Так я должен просто удалить все файлы, перечисленные с "dpkg -L mysql-server-5.1"? А что вы подразумеваете под "гадостью" в / var / lib / dpkg?
Роб

добавлен следующий этап
msw

6

Очевидно, обновление ожидает запуска сервера, а по какой-то причине - нет. Для решения проблемы есть несколько возможностей.

Самый простой:

  1. Откройте новый терминал и запустите:

    sudo services mysql start
    

Более сложный, но иногда необходимый: (это удобно, когда у вас нет доступа к другому терминалу):

  1. Нажмите «^ z» ( Ctrl+ Z), чтобы «ОСТАНОВИТЬ» вашу работу. Затем запустите:

    sudo services mysql start
    
  2. После запуска сервера введите следующее и нажмите Enter:

    fg 
    

    Это поместит вашу работу «ОСТАНОВЛЕНО» обратно на передний план и продолжит с того места, где она остановилась.


В моем случае это действительно ожидание запуска сервера.
Изак

Несмотря на то, что команда start сказала, что она уже запущена, в течение нескольких секунд команда apt-get продолжала работать нормально. Спасибо
Лиам Уэлдон

2

У меня была эта проблема, потому что это была копия виртуальной машины, поэтому я изменил IP-адрес сервера, но не изменил bind-адрес в файле my.cnf. Как только я изменил привязанный адрес, обновление не зависло и завершилось успешно.


1

Я столкнулся с той же проблемой и потратил больше одного дня на ее устранение.

Когда я удалил каталог базы данных /var/lib/mysql/, установка прошла гладко.


2
Это должно быть сделано с осторожностью, правда?
Slhck

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

исправил, и это не проблема.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.