16.04 оновлення зламало mysql-сервер


127

Моє загальне оновлення пройшло добре, але я залишаюсь з критично затяжною проблемою того, що mysql-сервер не може встановити себе, і нічого, що я намагаюся, змушує його працювати.

Це помилка, яку я бачу при спробі встановити / перевстановити її:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
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.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я спробував повністю його видалити, хоча роблю це спроби встановити MariaDB через залежності (?). Будь-які пропозиції щодо того, що я можу зробити, щоб виправити це, було б дуже вітається.

EDIT: Схоже, я не єдиний: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279


У мене тут така ж проблема .
KernelPanic

1
Довелося видалити phpmyadmin, який якось спричиняв проблеми залежності. Після перевстановлення все знову працює нормально.
Гінріх

1
do-release-upgrade-upgrade з Ubuntu 14 до 16 виконує непідтримуване оновлення з MySQL 5.5 на 5.7, тому очікується, що MySQL буде порушений після, як повідомлялося тут: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + помилка /…
Марко Марсала

1
@MarcoMarsala Я не знаю, чи можна сказати, що очікується, що MySQL буде порушений після оновлення Ubuntu 14-16, хоча, мабуть, це залежить від вашої точки зору. Пересічному користувачеві, звичайно, не очікується, що перерва в оновленнях LTS щось подібне до MySQL. Це дивно, що його не потрапили під час тестування.
TheGremlyn

apt встановити phpmyadmin - перевстановити виправлене вище, не потрібно торкатися mysql після ... перейти фігуру
Енді

Відповіді:


119

Інструкції @ andrew-beerman розміщені на правильному шляху, хоча вони мені не зовсім зрозумілі і, здається, рекомендують більше, ніж потрібно. Я зібрав відповідь із вищезазначеного та корисний пост у темі помилок.

Це кроки, які я вжив, щоб виправити це:

  1. Резервне копіювання my.cnf fileв систему /etc/mysqlі видалити або перейменувати його

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Видаліть папку /etc/mysql/mysql.conf.d/за допомогою

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Переконайтесь, що у вас немає my.cnfфайла, який зберігають десь в іншому місці (я це робив у своєму домашньому режисері!) Або /etc/alternatives/my.cnfвикористовувався

    sudo find / -name my.cnf
    
  4. Створіть резервну копію та видаліть /etc/mysql/debian.cnfфайли (не впевнені, якщо потрібно, але про всяк випадок)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. У випадку, якщо ваш системний журнал відображає помилку типу "mysqld: Не вдається прочитати редактор" /etc/mysql/conf.d/ "", створіть символічне посилання:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    Тоді послуга повинна мати можливість починати sudo service mysql start.

Це спрацювало!


17
Після всіх цих операцій (я це робив раніше) у мене все ще виникають проблеми з помилками ...
Серж,

5
Вам потрібно видалити кожен my.cnf. * З каталогу / etc / mysql. Шукайте my.cnf.backup, my.cnf.fallback та my.cnf.migrated - всі ці файли теж потрібно видалити (спочатку резервна копія!)
hitzi

8
@SergiiP sudo find / -name "my.cnf"може стати в нагоді.
starbeamrainbowlabs

1
mysql-server-core- має бути mysql-server-core-5.7. Інакше працював як шарм. Дякую!
Девід Тай

1
+1. Ти зробив мій день! Також вранці та ввечері! Я застряг.
Макс Юдін

56

Сьогодні у мене виникла та сама проблема, після спробу багатьох рішень я виявив, що проблема полягала в команді, sudo systemctl disable mysql.serviceяку я використовував для відключення автоматичного запуску MySQL, тому, щоб змусити її працювати, я знову ввімкнув MySQL-сервер за допомогою команди sudo systemctl enable mysql.serviceта запустив знову процес оновлення та він прекращено прекрасно.


5
Я зіткнувся з цією самою проблемою і те саме виправлення працювало і на мене.
Аллен

5
Працювали для мене. Чи було тут кожне рішення, mysql працював після цього.
Błażej Michalik

6
Те саме тут - це має бути верхній пост.
a1phanumeric

3
Працювали і для мене! Дуже дякую. Просто щоб бути явним, запустіть: sudo systemctl enable mysql.serviceі після цього запустіть sudo apt install -f.
Фернандо Паладіні

Це все, що я мав зробити. У мене був відключений автозапуск, як описано у @naruto. Я ввімкнув автозапуск і запустив "sudo apt upgrade". Тепер виправлено. Повинно відповісти. Це набагато простіше, більш стандартне і менш схильне до проблем рішення.
Джек Холт

20

Ваше повідомлення про помилку містить цей рядок:

subprocess installed post-installation script returned error exit status 1

Однак це installed post-installation scriptне називається поіменно. Після довгих роздумів я дізнався, що його назва (в моєму випадку) /var/lib/dpkg/info/mysql-server-5.7.postinst.

Відкрийте цей файл за допомогою sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinstабо потрібного редактора.

Угорі змініть рядок 3 (або близько того): set -eна set -x, збережіть файл. (опція -e"вихід на помилки", -xозначає "явно показати команду, виконану", імовірно)

Виконати sudo dpkg --configure -a --log /tmp/dpkg.log (опція --log необов’язково). Ви також можете просто запустити, apt upgradeякщо знаєте, що це буде єдиний пакет, який буде оновлений.

Тепер ви отримуєте багатослівний вихід mysql-server-5.7.postinstсценарію bash, і ви можете зрозуміти, що не так.

У моєму випадку він невдало намагався (повторно) запустити mysql_upgrade, але це було не потрібно для моєї спеціалізованої установки mysql. Я був впевнений, що раніше це було успішно, і все було добре.

Тому я прокоментував рядок 321 (для старих випусків mysqld спробуйте рядок 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

і команда, яка раніше не вийшла з ладу sudo apt upgrade(запустіть її знову), успішно закінчилася, і dpkg видалив статус помилки для цього пакета.

Тепер ви можете повернути set -xдо set -e(згадане вище). І необов’язково коментувати рядок оновлення mysql.

Можливо, знадобиться додаткова робота, якщо ви перемістили свій розділ даних mysql у нестандартне місце. Я перемістив шахту /var/lib/mysql/dataна інший привід через symlink. Тоді вам, можливо, доведеться тимчасово видалити символічне посилання, перш ніж postinstманіпуляція зі сценарієм. Потім знову створіть його після запуску оновлення пакета.

Після наступного оновлення незначної версії пакету debian mysqld ця проблема зі /var/lib/dpkg/info/mysql-server-5.7.postinstсценарієм може з’явитися знову.


Я закінчив очищення всього, а потім завантажив версію mysql-сервера спільноти і вручну встановив звідси: dev.mysql.com/downloads/mysql
RyanNerd

Точно те саме сталося і зі мною, і ваші кроки вирішили це. Запишіть для мене мій виклик mysql_upgrade на лінії 320. Чи можете ви пояснити, чому він повертає ненульове значення при виклику зі сценарію postinst?
emiliopedrollo

@emiliopedrollo Ні. Тут я не можу пояснити. Але я думаю, що номер рядка зараз 320, тому що останнім часом технічне обслуговування пакунків доповнило сценарій після встановлення, я спостерігав те саме саме днями під час останнього запуску програми оновлення програмного забезпечення (до якого входив новий mysql-deb-пакет) .
кнб

Дякую! Зі set -eмною вдалося вирішити точну проблему - MySQL не мав доступу для користувача системи ubuntu, зазначеного в /etc/mysql/debian.cnf . Тож я додав цього користувача до MySQL і надав привілеї, запустився dpkgзнову і він працював!
Аллен Гамільтон

17

Інструкції виправили це на моєму сервері: https://bugs.mysql.com/bug.php?id=72722

Я можу зрозуміти, як перебуває ваша система в непослідовному стані, але дозволяє не турбуватися про всю ситуацію і робити її крок за кроком, щоб очистити систему.

Спочатку давайте побачити поточний стан усіх пакунків mysql на машині, використовуючи: dpkg -l | grep mysql (Будь ласка, вставте вихід, виключаючи останній стовпець)

Перший стовпець позначає поточний стан пакета. Ось можливі варіанти:

ii) Встановлений rc) Видалені конфігураційні файли зберігаються (Це має бути стан усіх видалених вами пакетів за допомогою "apt-get remove", який не видаляє конфігураційні файли під / тощо)

Для цього вам потрібно запустити "apt-get purge <pkg-name>", поки ви не побачите жодних пакетів у наведеному вище списку.

Зауважте, що деякі не-mysql-серверні пакети, такі як python-mysql.connector та python-mysqldb, якщо вони встановлені, не потрібно видаляти, оскільки вони не впливають на цю ситуацію, але якщо їх видалити, це може спричинити проблеми програмам, що їх використовують.

Ми обов'язково спробуємо відвідати наші документи, щоб побачити, як можна захистити користувачів від потрапляння в цю проблему. Дякуємо, що детально поділилися своїми відгуками.


2
Дякуємо за dpkg -l | grep mysql . Це допомогло зрозуміти напрямок.
Макс Юдін

Команда була помилковою для очищення, вона повинна бути, sudo apt-get purge <pkg-name>я виправив її з редагуванням, але: я використав символи unicode для, <тому що в іншому випадку вона не буде відображатися. Попереджуйте копію, вставляючи цю команду
Тоскан

3

У моєму випадку, з strace, я побачив, що / var / run / mysqld / не існує і mysqld не може створити файл mysqld.sock.

Ці команди вирішили мою проблему:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Зараз:

systemctl start mysql

І MySQL знову працює :)


Я пропоную вам додати ці рядки до / usr / share / mysql / mysql-systemd-start, починаючи з рядка 25, тоді вам не доведеться відтворювати цей каталог після кожного перезавантаження (вибачте, що в цьому коментарі рядок повернення не працює) : якщо [! -d / run / msyqld]; тоді mkdir -p -m0755 / run / mysqld || {echo "Неможливо створити / запустити / mysqld"; вихід 1; } chown mysql: mysql / run / mysqld || {echo "Неможливо погладити / запустити / mysqld"; вихід 1; } fi
Скубіду

3

У моєму випадку я міг вирішити проблему, додавши

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

до /etc/apparmor.d/local/usr.sbin.mysqld

Для отримання більш детальної інформації дивіться мою відповідь (КрістофС) на stackoverflow.


0

У мене було те саме питання. Я кілька разів намагався перевстановити mysql, але успіху не мав.

Я зрозумів, що проблема для мене полягає в тому, що вже запущений інший mysql-процес.

Детальніше:

Після того, як я уважно прочитав журнали /var/log/mysql/error.log, знайшов:

[ПОМИЛКА] Не вдається запустити сервер: Прив’язати до порту TCP / IP: Адреса вже використовується

[ПОМИЛКА] У вас вже є інший сервер mysqld, який працює на порту: 3306?

Схоже, інша програма вже використовувала порт.

Я перевірив це за допомогою ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

І я вбив запущений процес sudo kill -15 14706

Тоді я запустив mysql: /etc/init.d/mysql start

Нарешті, mysql працює для мене! Я сподіваюся, що це комусь допоможе.


0

Жодна відповідь на цій сторінці не працювала для мене.

Я перейшов на сторінку завантажень Oracle , завантажив mysql-apt-config_0.8.8-1_all.debі встановив MySQL з Oracle repo:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server

2
isntall-> installдрукарські помилки. Дурне SO не дозволяє мені виправити одного персонажа.
Csaba Toth

Чому ви пішли до оракулу, щоб завантажити mysql
Sinscary

@Sinscary Ця відповідь надовго, але це, мабуть, тому, що у них була нова версія, ніж менеджер системних пакетів?
ostrokach

0

У мене виникла проблема на кількох серверах. Виправленням було запустити apt install phpmyadmin --reinstall

що вирішило вище (не потрібно торкатися mysql згодом)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.