Что было. MariaDB не стартует: InnoDB: Fatal: Ending processing because of a corrupt database page. Пользователь удалил все свои базы, ошибка осталась (повреждена системная область). Добавил innodb_force_recovery=4 в конфиг, эффекта нет.
Причина. Строка была дописана в конец файла без заголовка секции. Файлы конфигурации MySQL/MariaDB устроены по секциям ([mysqld], [client], [mysqldump]…), и параметр, стоящий вне [mysqld] (или в [client]), сервер не читает, а клиентские программы его не понимают. В обсуждении в итоге пошли по пути чистой переустановки с очисткой /var/lib/mysql и последующим импортом дампа; автор подтвердил.
Как проверить, что параметр реально применён.
mysqld --print-defaults # или mariadbd --print-defaults: что сервер прочитает из всех файлов
my_print_defaults mysqld # то же для секции [mysqld]
mysql -e "SHOW VARIABLES LIKE 'innodb_force_recovery';" # если сервер запустился
Ошибки чтения конфига видны и в журнале при старте (unknown variable, unknown option), и они тоже мешают запуску: незнакомая опция в [mysqld] роняет сервер сразу.
Где лежат конфиги и в каком порядке читаются. /etc/mysql/my.cnf включает /etc/mysql/conf.d/*.cnf и /etc/mysql/mariadb.conf.d/*.cnf (MariaDB) или mysql.conf.d/ (MySQL); файлы читаются по алфавиту, последнее значение выигрывает. Свои параметры класть в отдельный файл /etc/mysql/mariadb.conf.d/99-local.cnf с заголовком [mysqld] и не трогать пакетные файлы.
Про innodb_force_recovery ещё раз. Значения 1–3 безопасны для чтения и снятия дампа; 4–6 могут необратимо испортить данные и годятся только для попытки прочитать то, что иначе не читается, на копии. Если системное табличное пространство (ibdata1) повреждено так, что не помогает даже 6, чистая переустановка с импортом дампа это и есть решение, и хорошо, если дамп есть.
Порядок при повреждённой странице.
- Копия каталога данных.
[mysqld]→innodb_force_recovery = 1, старт; не стартует, поднимать до 3.mariadb-dump --all-databases --single-transaction > all.sql(при уровнях ≥4 убрать--single-transaction).- Остановить, убрать параметр, очистить каталог данных,
mariadb-install-db(или переустановка пакета с purge), импорт дампа. - Причина повреждения: диск, внезапные выключения виртуальной машины, нехватка места. Без её устранения повторится.
Файлы опций описаны в документации MariaDB.