Вопрос или проблема
Я только что установил 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 профилем. Согласно вашему описанию, вы уже предприняли ряд шагов, но давайте рассмотрим их детальнее:
-
Остановка MariaDB: Прежде чем взаимодействовать с AppArmor, убедитесь, что MariaDB остановлена:
sudo systemctl stop mariadb
-
Отключение профиля 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.
-
Отключение автоматической загрузки профиля:
Чтобы профиль не загружался снова после перезагрузки, создайте ссылку:sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld
-
Проверка и запуск MariaDB:
После всех изменений, перезапустите службу:sudo systemctl start mariadb
И проверьте её статус:
sudo systemctl status mariadb
Сервис должен быть в состоянии "active (running)".
-
Дальнейшая настройка:
Если проблема сохраняется, стоит проверить лог-файлы MariaDB и AppArmor (/var/log/syslog и /var/log/mysql/error.log) на наличие специфичных ошибок. Это поможет идентифицировать дополнительные проблемы, которые могут возникнуть.
Кроме того, с учетом того, что вы работаете с версией Ubuntu 19.10, стоит обратить внимание на изменение и обновление ваших конфигураций и версий пакетов. Ubuntu 19.10 больше не поддерживается официально, это значит, что вы не можете получать исправления безопасности и обновления, что в долгосрочной перспективе может создать дополнительные проблемы.
В случае, если дальнейшее решение проблемы на текущей версии ОС невозможно, можно рассмотреть вариант обновления до последней LTS версии Ubuntu, которая имеет более стабильную поддержку и более актуальны версии пакетов MariaDB и связанных с ней служб.
Решение таких проблем требует тщательности и внимания к деталям, и важно иметь резервные копии данных перед изменением конфигураций системных компонентов.
Если потребуется дополнительная помощь, пожалуйста, обратитесь к сообществу или профессиональному администратору Linux, чтобы минимизировать риски для ваших данных и системы.