News:

Не допустить ошибок, значит прожить неполноценную жизнь. Стив Джобс

Main Menu

MySQL - ошибка при обновлении

Started by STALKER_SLX, 03 June 2019, 15:01

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

STALKER_SLX

В процессе обновления системы Ubuntu 16.04 появляется ошибка о невозможности обновить MySQL:
"Настраивается пакет mysql-server-5.7 (5.7.26-0ubuntu0.16.04.1) ...
mysql_upgrade: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) while connecting to the MySQL server
Upgrade process encountered error and will not continue.
mysql_upgrade failed with exit status 11
dpkg: ошибка при обработке пакета mysql-server-5.7 (--configure):
 подпроцесс установлен сценарий post-installation возвратил код ошибки 1
dpkg: зависимости пакетов не позволяют настроить пакет mysql-server:
 mysql-server зависит от mysql-server-5.7, однако:
  Пакет mysql-server-5.7 пока не настроен.

dpkg: ошибка при обработке пакета mysql-server (--configure):
 проблемы зависимостей — оставляем не настроенным
Отчёт apport не записан, так как сообщение об ошибке указывает на повторную ошибку от предыдущего отказа.
                         При обработке следующих пакетов произошли ошибки:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)"



При этом все остальные пакеты успешно обновились!

На просторах сети нашёл вот такую инструкцию по решению такой же ошибки:
https://900913.ru/2017/10/06/mysqld-sock-not-found/

Делаю так.
1. Ищу файл сокета для MySQL
sudo lsof /var/run/mysqld/mysqld.sock

Получаю вывод:
...
lsof: status error on /run/mysqld/mysqld.sock: No such file or directory
...


2. Создаю папку, в которой должен лежать файл сокета:
sudo mkdir /var/run/mysqld

3. Создаю сам сокет командой mkfifo (хотя сокет — это тоже файл, создавать его можно только специальной программой — mkfifo):
sudo mkfifo /var/run/mysqld/mysqld.sock

4. Устанавливаю владельцем папки "/var/run/mysqld" пользователя "mysql"
sudo chown -R mysql /var/run/mysqld

5. Перезапускаю MySQL
sudo systemctl restart mysql

6. Смотрю текущий статус (запущен ли) MySQL
sudo systemctl status mysql

Вывод - запущен.

7. Но при повторном вводе команд обновления ОС получаю опять ту же ошибку:
sudo apt update && apt upgrade
sudo apt dist-upgrade


То есть, пропадает файл сокета MySQL
...
lsof: status error on /run/mysqld/mysqld.sock: No such file or directory
...


Есть ли способ решить данную проблему без переустановки самой MySQL или ОС?!

Уваров А.С.

MySQL из репозитория в 14.04 и 16.04 работает нестабильно, несколько раз налетали на разные глюки и чудеса. В итоге где-то ушли на MariaDB, а где-то вообще на Debian.

STALKER_SLX

Забыл упомянуть ещё одну важную вещь - mysqldump отказывается выполнять бекапы ВООБЩЕ, кидается ошибками типа:
"mysqldump: [ERROR] unknown variable 'key_buffer_size=16M'"

Хотя ВСЕ значения в конфиге стоят по умолчанию (сам ничего из этого не изменял), а базы данных там всего по несколько мегабайт.
Команды выполнял строго в соответсвии с рекомендациями тут:
https://interface31.ru/tech_it/2016/02/osnovy-administrirovaniya-mysql-pri-pomoschi-komandnoy-stroki.html

Второй момент - если я закоментирую строку, на которую он ругается, то он начинает матерится на следующую за ней и так аж до самого конца конфига...

В конечном итоге бекапы всех баз сделал с помощью "phpMyAdmin", ну и продублировал это ещё и "SypexDumper" (на всякий случай)

STALKER_SLX

Прошу простить меня за "глупый вопрос": если я таки снесу MySQL и вместо нее установлю MariaDB с репозиториев разработчика, как это описано в статье (с поправкой на свой дистрибутив - Ubuntu 16.04):
https://interface31.ru/tech_it/2018/09/osobennosti-ustanovki-i-nastroyki-mariadb-v-debian-9.html

Заработают ли базы данных сделанные раннее с помощью "phpMyAdmin" и "SypexDumper"?! Или нужны какие-то дополнительные шаманства?!


STALKER_SLX

После долгих мучений и страданий как временное решение сделал так. Может кому-то в будущем и пригодится.
1. На официальном сайте разработчиков MySQL нашёл такую доку:
https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

2. Добавил в ОС новый репозиторий от сюда:
https://dev.mysql.com/downloads/repo/apt/

С помощью браузера скачал и сохранил файл «mysql-apt-config_0.8.13-1_all.deb» в домашнюю папку пользователя (на текущий момент у него такое название как я указал, а у Вас уже может бы и другим).

Открыл терминал и ввёл последовательно команду для установки нового репозитория:
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb

В открывшемся диалоговом окне выбираю строчку «Ok» (самая нижняя), а потом на кнопку «Ok».

Если Вы сохранили файл в другой каталог, то нужно указать путь к нему или просто перейти в ту папку и запустить приведённые выше мной команды.


3. Обновляем список репозиториев в системе:
sudo apt-get update

4. Запускаем процесс установки MySQL:
sudo apt-get install mysql-server

Во время данного процесса система попросит Вас ввести пароль суперпользователя для MySQL, а также спросит стоит ли заменять существующий файл конфиг на новый или оставить текущий (тут решайте сами). Я решил заменить и потом уже подправить под свои нужды.

5. Теперь посмотрим, запустился ли наш только что установленный MySQL:
sudo service mysql status

Или так:
sudo systemctl status mysql


Если нет, тогда запустим его командой:
sudo service mysql start

Или так:
sudo systemctl start mysql


После указанных выше действий MySQL успешно обновился и запустился, таким образом удалось пока устранить ошибку, указанную в названии данной темы!

И что меня совсем удивило – заработал mysqldump!!!


P.S.: не знаю какие траблы с ОС могут меня ждать в будущем после таких действий, но пока ошибок в работе не обнаружил!



Уваров А.С.

Если взлетело - то особо никаких. По сути вы заменили MySQL из репозиториев Ubuntu, на MySQL от разработчиков. Лучше бы конечно было снести старый MySQL вместе с конфигами, но если все работает - то хорошо.

Аналогично можно было бы поставить и MariaDB. Базы данных у них полностью совместимы, если вы конечно не использовали в них собственные фишки MariaDB. Но тот, кто делает это осознанно обычно знает что и как.