Ошибка в базе данных moodle

Ошибка в базе данных moodle

от Maxim Kachalov -
Количество ответов: 7

Прошу помощи специалистов.

Moodle у нас в школе существует уже порядка 3 лет. И 2 года минимум, тянется ошибка. Раньше помогала перезагрузка, теперь нет.

Суть такова что по субботам в системе занимается начальная школа, это порядка 400 человек. В один прекрасный момент moodle начал выдавать ошибку соединения с базой данных, после перезагрузки всё восстанавливалось на некоторое время.

Moodle стоит на нашем же сервере, сначала это Ubuntu server, с разными панелями. На данный момент это CentOS. Но проблема явно в самой базе, ибо уже менялось всё окружение, но ошибка остаётся.

Своих познаний в БД к сожалению не хватает, как выяснилось, специалистов в образовательной среде Алтайского края тоже мало и кого либо способного и готового помочь я не нашёл.

Приведу лог системы когда упала Бд, так же могу предоставить всё что попросите. Первое событие в 09.19


В ответ на Maxim Kachalov

Re: Ошибка в базе данных moodle

от Vadim Tabunshchik -
Изображение пользователя Developers

Версия Мудл? Какой дистр CentOS? Почему MySQL 8.0? Кто вам это всё устанавливал и настраивал? В CentOS, насколько я знаю, из коробки идет mariadb, так почему её не использовать, как рекомендуемый сервер БД для Мудл?

Гуглите «mysqld got signal 11», из-за этого у вас падает MySQL, потом, как следствие: «InnoDB: Could not find any file associated with the tablespace ID: 34048». Похоже, что «побилась» какая-то таблица (или несколько) в БД. Ещё сайты установлены на сервере? БД есть, кроме Мудл?

signal 11 может быть из-за чего угодно - криво собранный/установленный софт, проблемы с железом (битая память и т. п.)

В ответ на Vadim Tabunshchik

Re: Ошибка в базе данных moodle

от Maxim Kachalov -
1. Moodle 3.6.3 (Build: 20190311)
2. CentOS 7
3. После последнего сбоя, решил переустановить систему и сменить панель и версию mysql 8.0 поставил с помощью панели на пустую систему.
Устанавливал сам. Как уже говорил, изначально сервер был на убунту, от туда и пошёл mysql.
Есть еще БД, CMS хостинга картинок, для нужд школьного сайта. Она легкая и проблем с ней нет.
Железо отпадает, система на гипервизоре, другие виртуалки работают хорошо.

"Похоже, что «побилась» какая-то таблица (или несколько) в БД"
Больше всего к этому склоняюсь, но не знаю как найти какая.
Делал проверку в phpmyadmin, у всех статус ОК
В ответ на Maxim Kachalov

Re: Ошибка в базе данных moodle

от Vadim Tabunshchik -
Изображение пользователя Developers

>> Как уже говорил, изначально сервер был на убунту, от туда и пошёл mysql

Так ставьте 5.7, зачем самодеятельность с 8.0? Вы её с Мудл тестировали, форумы читали на предмет работоспособности? Что в требованиях к Мудл 3.6 написано?

>> не знаю как найти какая

В логах строка 2397: «Nov 26 09:19:33 host mysqld: Query (7f117c89d128): INSERT INTO mdl_question_attempts…»

Проверка в phpmyadmin - это что мертвому припарка. Попробуйте сделать полный дамп БД Мудл через mysqldump. Если получится (без ошибок), снесите всю БД и залейте заново из дампа.

В ответ на Vadim Tabunshchik

Re: Ошибка в базе данных moodle

от Maxim Kachalov -
Создал дамп через mysqldump. Сделал mysqlcheck, у всех таблиц статус ОК. Это наверно то же самое что и через Phpmyadmin.
Удалил mysql 8 и установил mysql 3.7 , но тут проблема всё равно не в нём, этой ошибке 2 года, а 8 мускул поставил только недавно при последнем переносе на новый сервер. Думал что проблема в окружающей среде.
После сбоя восстановить базы не получается. Поэтому я делаю откат к контрольной точке, когда было всё хорошо. Пробую различные манипуляции, но при очередной субботе всё опять ломается в первый час.
До сбоя таблица mdl_question_attempts спокойно читается, в другой сбой указывалась другая таблица.

В ответ на Maxim Kachalov

Re: Ошибка в базе данных moodle

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
судя по тому, что ошибка при записи в mdl_question_attempts, активно используется тестирование. Тестирование - одно из самых требовательных по ресурсам процессов в moodle - задействовано много таблиц и постоянно что-то куда-то пишется. Поэтому предположу, что просто не хватает ресурсов железа. В первую очередь вопрос к скорости работы жесткого диска. Так как система под гипервизором, значит один физический диск делится на несколько виртуалок. Возможно на уровне виртуалке у вас настроено ограничение на количество iops к диску. Если это так, то обязательно снимите это ограничение.
Если гипервизор позволяет, посмотрите в логах на этот момент времени read и write latency, а также объем оперативки, занятый системой - ведь если оперативка кончается, в ход идёт swap, что ещё сильнее увеличивает нагрузку на диск, что в свою очередь ещё сильнее увеличивает latency. Тормоза в ответах сервера увеличивают количество обновлений страниц пользователями, что приводит к ещё большему числу одновременных запросов, ещё большему потреблению памяти и нагрузки на дб, swap и жесткий диск, в общем цепная реакция.
Поэтому нужно понять, какой из компонентов системы в вашем случае является "бутылочным горлышком".
На саму машину поставьте любое средство мониторинга, я пользуюсь munin, общее представление он позволяет получить, но кто-то возможно подскажет более удобные варианты вроде zabix. Вот примеры того, какие выводы можно сделать на основе мониторинга

1

2
3
6

Вот сравните, для примера графики. Видно, что профиль нагрузки на apache в целом соответствует профилю нагрузки на mysql и на процссор. iowait на графике, это ожидание системой ответа диска или сети. Сравните iowait- с графиком нагрузки на диск - профили почти совпадают. Сильный пик в районе 19-00 - большая проблема, так как может привезти к тому, что в этот момент система отвечает сильно дольше положенного. Пик связан с большой нагрузкой на диск в этот момент, но не из-за количества пользователей и запросов к БД. Скорее всего какая-то задача из cron потребляет много диска.
Проверяем. Действительно, в этот момент был какой-то особенно долгий запрос к БД и понижение скорости чтения диска
4
5

В ответ на Maxim Kachalov

Re: Ошибка в базе данных moodle

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Опишите, каким образом пытаетесь восстанавливать базу данных. Проверьте, точно ли у вас в mysql используется innodb. innodb транзакционный движок, его очень трудно "уронить" до неработоспособного состояния при штатной работе. А вот при проблемах с железом это вполне возможно. Если есть возможность, проверьте память и жесткий диск хотя бы через smart. Если на диске bad-блоки, это будет проявляться в работе только той виртуалки, в чей vhd-файл попали сбойные блоки, поэтому отсутствие сбоев в других виртуалках это не доказательство работоспособности железа. Но в логах гипервизора такие проблемы вроде должны отражаться.
В ответ на Maxim Kachalov

Re: Ошибка в базе данных moodle

от Maxim Kachalov -

Восстанавливаю по разному, обычно это ранее созданный дамп через phpmyadmin. Если есть контрольная точка, то возвращаю её.

Спасибо, поработаю в этом направлении. Посмотрю в сторону munin.

Про cron вы возможно правы ибо база ломалась даже когда сайт был закрыт на тех. обслуживание. Попробую его пока отключить на субботу и буду запускать вручную.

Вообще на сервере 4 GB памяти, делал и 6, тоже были проблемы. Думал что этого достаточно, но теперь понимаю если не настроен оптимально mysql и php то ни сколько не хватит, точнее если не правильно настроен.