MySQL: Can't open the mysql.plugin table и повреждение системных таблиц
Сообщения про невозможность открыть системные таблицы означают, что MySQL не может прочитать свой каталог данных: нет прав, файлы повреждены или схема не соответствует версии сервера после обновления.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог данных принадлежит не тому пользователю
Самая частая причина после восстановления из копии под root. Сервер работает от mysql и доступа к файлам не получает.
-
Схема системных таблиц не обновлена после смены версии
Новый сервер на старом каталоге данных может не найти нужных таблиц. Пакетное обновление обычно делает это само, ручная замена бинарников — нет.
-
Повреждены файлы системных таблиц
После аварийного выключения или ошибок диска файлы могут быть повреждены. Сервер сообщает об этом при попытке их открыть.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Главный источник: конкретная таблица и причина.
sudo tail -50 /var/log/mysql/error.logВладелец каталога данных.
sudo ls -ld /var/lib/mysqlКод завершения и последние строки.
systemctl status mysql --no-pager -lРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Самая частая причина после восстановления из копии под root. Сервер работает от mysql и доступа к файлам не получает.
- Как проверить
-
Посмотрите владельца каталога и файлов внутри.
sudo ls -ld /var/lib/mysql && sudo ls -la /var/lib/mysql | head
- Как исправить
-
Смените владельца рекурсивно и запустите службу.
sudo chown -R mysql:mysql /var/lib/mysql && sudo systemctl start mysql
- Почему происходит
- Новый сервер на старом каталоге данных может не найти нужных таблиц. Пакетное обновление обычно делает это само, ручная замена бинарников — нет.
- Как проверить
-
Посмотрите версию сервера и записи об обновлении схемы.
mysqld --version sudo grep -i "upgrade" /var/log/mysql/error.log | tail -10
- Как исправить
- Запустите обновление схемы средствами MySQL (в 8.0 это делает сервер сам при старте, в старых версиях — mysql_upgrade).
- Почему происходит
- После аварийного выключения или ошибок диска файлы могут быть повреждены. Сервер сообщает об этом при попытке их открыть.
- Как проверить
-
Посмотрите журнал ошибок и записи ядра о диске.
sudo tail -40 /var/log/mysql/error.log journalctl -k -b --no-pager | grep -iE "I/O error|ext4-fs error" | head
- Как исправить
- Восстановите данные из резервной копии. Попытки починить системные таблицы вручную на повреждённом диске обычно заканчиваются хуже.
Пример вывода
Каталог данных принадлежит root. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× mysql.service - MySQL Community Server
Active: failed (Result: exit-code) since Mon 2026-09-15 10:11:02 MSK; 2s ago
mysqld[4100]: [ERROR] [MY-010735] [Server] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
mysqld[4100]: [ERROR] [MY-010119] [Server] Aborting
systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Связанные ошибки
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- status=1/FAILURE в systemd Код 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
- MySQL: InnoDB не запускается после аварийного завершения Ошибки InnoDB при старте: повреждение страниц, несовпадение журнала, режим принудительного восстановления.
- MySQL убит из-за памяти: буферный пул больше доступной памяти MySQL падает сразу после старта или через минуты: размер innodb_buffer_pool_size превышает память машины.
- MySQL: Can't connect to local server through socket Клиент не находит unix-сокет MySQL: сервер не запущен, путь к сокету другой, каталог в /run не создан.
- MySQL: Too many connections База отказывает в новых подключениях: исчерпан max_connections или предел дескрипторов службы.
- PostgreSQL: data directory has invalid permissions Кластер PostgreSQL не запускается из-за прав на каталог данных. Требование 0700 или 0750 и как вернуть владельца.
- nginx 403 Forbidden и Permission denied на файлы сайта nginx отдаёт 403: нет прав на файлы сайта, закрыт каталог по пути, мешает SELinux или AppArmor, нет индексного файла.
Где встречается чаще всего
Источники
- Документация MySQL: запуск и обновление
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено сменой владельца /var/lib/mysql на root.