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.


1
і, це був би ти теж ... newyork.ubuntuforums.org/showthread.php?t=1514195
nik

2
@nik: і? він не повинен задавати одне питання в двох місцях? добре розміщувати в двох місцях? ви показуєте, що знаєте, як користуватися Google?
msw

2
@msw, Це не був негативний коментар чи шоу. Насправді я думав, що знайшов ще одне посилання на подібну проблему .. але, виявилося, це не так.
nik

@msw: Перехресне повідомлення - це суперечливо. Звичайно, це дає змогу отримати відповідь, але також будуть різні "команди", які працюють над одним і тим же, ймовірно, придумуючи ті самі пропозиції та просто витрачаючи час.
Боббі

Причиною, яку я опублікував тут, було те, що я не отримую жодної відповіді на ubuntuforums.org. Потрібно сказати, що я відтепер я не буду використовувати їх як технологічний ресурс :)
Роб,

Відповіді:


2

Спробуйте перейти на рівень нижче підходящого, створивши резервну копію баз даних:

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-сервера містить або вимагає ці пакети:

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-сервер", він каже, що він не встановлений. Тоді я спробую "dpkg -r mysql-server-5.1", і він говорить: Пакет знаходиться в дуже поганому непослідовному стані - вам слід перевстановити його перед спробою видалення.
Роб

Я припускаю, що ви спробували "dpkg -r mysql-server-5.1" і не вдалося?
msw

Так, це не вдається. Він визнає, що він є, але каже, що "Пакет знаходиться в дуже поганому непослідовному стані - слід перевстановити його перед тим, як намагатися видалити".
Роб

"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 
    

    Це поставить вашу роботу "СТОПОВАНО" назад на перший план і продовжить там, де вона припинилася.


У моєму випадку сервер дійсно чекав запуску сервера.
izak

Незважаючи на те, що команда start сказала, що вона вже запущена, протягом декількох секунд влучне отримання триває нормально. Спасибі
Ліам Уолдон

2

У мене була ця проблема, оскільки це була копія VM, тому я змінив 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.