SystemdDoctor
mariadb.service база данных

MariaDB в systemd: разбор отказов

MariaDB во многом повторяет MySQL, но unit-файл у неё свой и устроен аккуратнее: есть предварительные проверки, отдельный таймаут на восстановление и вспомогательные unit. Разбор отказов при этом тот же: собственный журнал ошибок, права каталога данных, память.

О службе

Unit MariaDB включает предварительные команды, которые проверяют каталог данных и создают нужные подкаталоги в /run. Если падает одна из них, в статусе виден код от ExecStartPre, а не от сервера — как у nginx. Это сразу сужает поиск: до запуска сервера дело не дошло.

Отдельно стоит режим восстановления после сбоя. MariaDB может восстанавливаться долго, и в дистрибутивных unit-файлах для этого предусмотрен большой таймаут. Если вы переопределяли TimeoutStartSec=, убедитесь, что значение не меньше времени восстановления.

В кластерных установках (Galera) добавляется отдельная логика первого узла. Там отказ запуска часто связан не с самой базой, а с состоянием кластера: узел не может определить, у кого актуальные данные. Это разбирается в терминах кластера, а не systemd.

Как устроена

Имя unitmariadb.service, есть также mariadb@.service для нескольких экземпляров
Журнал ошибокпо умолчанию идёт в журнал systemd, при настройке — в /var/log/mysql/error.log
Каталог данных/var/lib/mysql, владелец mysql:mysql
Предварительные проверкив unit есть ExecStartPre= — их код вы увидите при отказе
Кластерпри Galera отказ запуска может быть связан с состоянием кластера, а не с базой

Частые ошибки

14 записей базы отмечены за этой службой.

Коды выхода

  • status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.

Сообщения журнала

  • Permission denied в журнале службыОтказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
  • Address already in use при запуске службыПорт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.

Состояния результата

  • Failed with result 'timeout'Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
  • Failed with result 'oom-kill'Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.

Ресурсы и ограничения

Ошибки служб

Коды выхода этой службы

Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.

statusЧто означает у этой службыКуда смотреть
1/FAILURE ошибка настроек или права каталога данных; смотрите строки предварительных команд. разбор
таймаут при запуске долгое восстановление после аварийного завершения. разбор

Диагностика

Показывает, упала предварительная команда или сам сервер.

systemctl status mariadb --no-pager -l

MariaDB по умолчанию пишет ошибки прямо в журнал systemd.

journalctl -u mariadb -n 60 --no-pager

Разбор настроек без запуска.

sudo mariadbd --help --verbose 2>&1 | head -20 || sudo mysqld --validate-config

Права на каталог данных и на каталог в /run.

sudo ls -ld /var/lib/mysql /run/mysqld

Параметры unit, которые тут важны

  • ExecStartPre=проверки каталога данных до запуска сервера
  • TimeoutStartSec=восстановление после сбоя требует запаса времени
  • LimitNOFILE=много открытых файлов таблиц под нагрузкой
  • User=работа от mysql; владелец каталога данных должен совпадать

Источники

  • Документация MariaDB: systemd документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026