mariadb.service застрял на этапе активации

Вопрос или проблема

Я только что установил mariadb на свой ubuntu 19.10 с помощью sudo apt install mariadb-server mariadb-client, после чего, когда я пытаюсь запустить сервер с помощью sudo systemctl start mariadb.service, оболочка зависает, и мне приходится использовать Ctl+c, чтобы она заработала.
В статусе показывается активируется (запуск)

  • Другие сервисы работают нормально с systemctl start
~$ sudo systemctl status mariadb.service  

mariadb.service - MariaDB 10.3.22 сервер базы данных
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: activating (start) since Mon 2020-04-20 08:44:57 IST; 5min ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 10705 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
  Process: 10707 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 10711 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSRE
 Main PID: 10759 (mysqld)
    Tasks: 15 (limit: 4915)
   Memory: 64.6M
   CGroup: /system.slice/mariadb.service
           └─10759 /usr/sbin/mysqld

Apr 20 08:44:57 TheCybertron systemd[1]: Starting MariaDB 10.3.22 server базы данных...
Apr 20 08:44:57 TheCybertron mysqld[10759]: 2020-04-20  8:44:57 0 [Note] /usr/sbin/mysqld (mysqld 10.3.22-MariaDB-0ubuntu0.19.10.1) начинает работу как процесс 10759 ...

Вероятно, у вас была установлена MySQL заранее. Это известная ошибка: MySQL устанавливает профиль AppArmor, и пакет MariaDB не может его правильно деинсталлировать (см. детали на Launchpad).

Вы можете использовать эти команды для решения проблемы (адаптировано из упомянутой выше ошибки):

sudo systemctl stop mariadb
echo "/usr/sbin/mysqld { }" | sudo tee /etc/apparmor.d/usr.sbin.mysqld
sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld

Это должно показать Удаление успешно для "/usr/sbin/mysqld".

Затем, очень важно:

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld

Без этого какой-то профиль AppArmor возвращается после перезагрузки (неизвестно откуда), мешая MariaDB загружаться вообще (не удается загрузить libaio).

Вы можете затем запустить MariaDB с sudo systemctl start mariadb

Выполнил совет Ale:

sudo systemctl stop mariadb
echo "/usr/sbin/mysqld { }" | sudo tee /etc/apparmor.d/usr.sbin.mysqld
sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld

Но:

sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld
Кэш чтения/записи отключен: отсутствует файл интерфейса. (Ядру необходим патч совместимости AppArmor 2.4.)
Предупреждение: не удалось найти подходящую ФС в /proc/mounts, она смонтирована?
Используйте --subdomainfs, чтобы переопределить.

и:

sudo apt install apparmor
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
apparmor уже самой новой версии (3.0.4-2ubuntu2.4).

Я не знаю, как отключить эту штуку apparmor?!

Ответ или решение

Проблема, с которой вы столкнулись, при попытке запустить MariaDB на Ubuntu, связана с конфликтом профиля безопасности AppArmor, ранее установленного для MySQL. Давайте разберёмся с деталями и предложим пошаговое решение.

Теория

AppArmor — это модуль безопасности в Linux, который ограничивает программы на уровне операционной системы, аналогично firewall для сети. Когда вы ранее устанавливали MySQL, он автоматически создавал профиль AppArmor для mysqld (демона MySQL), который теперь конфликтует с новым установлением MariaDB. Хотя MariaDB является "форком" MySQL, не все конфигурации и предустановки полностью совместимы, что и вызывает данную проблему.

Пример

Вы столкнулись с ситуацией, когда MariaDB сервис находится в состоянии "activating (start)", что означает, что он пытается запуститься, но что-то препятствует этому, вероятно, это может быть связано с AppArmor, не допускающим выполнения необязательных действий, необходимых для запуска MariaDB.

Применение

Чтобы решить эту проблему, вам нужно отключить профиль AppArmor, который конфликтует с MariaDB. Это часто вызвано оставшимся после удаления MySQL профилем. Согласно вашему описанию, вы уже предприняли ряд шагов, но давайте рассмотрим их детальнее:

  1. Остановка MariaDB: Прежде чем взаимодействовать с AppArmor, убедитесь, что MariaDB остановлена:

    sudo systemctl stop mariadb
  2. Отключение профиля AppArmor:
    Создайте пустой профиль для mysqld, чтобы перезаписать текущий:

    echo "/usr/sbin/mysqld { }" | sudo tee /etc/apparmor.d/usr.sbin.mysqld

    Затем деактивируйте профиль:

    sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld

    Если в вашем случае экран выводит сообщение о недостатке fs, это может быть связано с проблемами конфигурации AppArmor, которые стоит проверить отдельно. Обратите внимание, что на некоторых конфигурациях может потребоваться загрузка в режиме "recovery" или выполнение других действий для деконфликтования AppArmor.

  3. Отключение автоматической загрузки профиля:
    Чтобы профиль не загружался снова после перезагрузки, создайте ссылку:

    sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld
  4. Проверка и запуск MariaDB:
    После всех изменений, перезапустите службу:

    sudo systemctl start mariadb

    И проверьте её статус:

    sudo systemctl status mariadb

    Сервис должен быть в состоянии "active (running)".

  5. Дальнейшая настройка:
    Если проблема сохраняется, стоит проверить лог-файлы MariaDB и AppArmor (/var/log/syslog и /var/log/mysql/error.log) на наличие специфичных ошибок. Это поможет идентифицировать дополнительные проблемы, которые могут возникнуть.

Кроме того, с учетом того, что вы работаете с версией Ubuntu 19.10, стоит обратить внимание на изменение и обновление ваших конфигураций и версий пакетов. Ubuntu 19.10 больше не поддерживается официально, это значит, что вы не можете получать исправления безопасности и обновления, что в долгосрочной перспективе может создать дополнительные проблемы.

В случае, если дальнейшее решение проблемы на текущей версии ОС невозможно, можно рассмотреть вариант обновления до последней LTS версии Ubuntu, которая имеет более стабильную поддержку и более актуальны версии пакетов MariaDB и связанных с ней служб.

Решение таких проблем требует тщательности и внимания к деталям, и важно иметь резервные копии данных перед изменением конфигураций системных компонентов.

Если потребуется дополнительная помощь, пожалуйста, обратитесь к сообществу или профессиональному администратору Linux, чтобы минимизировать риски для ваших данных и системы.

Оцените материал
Добавить комментарий

Капча загружается...