Error writing to database

Error writing to database

от Alexandre Scherbyna -
Количество ответов: 8

Удаляю пользователей через  Администрирование Пользователи Учетные записи Действия над несколькими пользователями. За один раз удаляется не более десятка отфильтрованных пользователей и возникает ошибка Error writing to database. Включение отладки никакой дополнительной информации не дает. Ошибка наблюдалась и наблюдается во многих версиях: 2.5, 2.4, 2.3... Есть ли у знатоков какие-либо идеи, как с этим бороться?

В ответ на Alexandre Scherbyna

Re: Error writing to database

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

Александр, мало информации, при включенной отладке должно быть сообщение об ошибке.

Каким образом создавались уч. записи? MDL-35495

Какой сервер БД используется? MDL-30055 MDL-34069 MDL-37850

Там, кстати, ещё один баг не вылечен - MDL-24576

рис

В ответ на Vadim Tabunshchik

Re: Error writing to database

от Alexandre Scherbyna -

Увы, никаких сообщений об ошибке кроме Error writing to database браузер не выводит, хотя вывод отладочных сообщений установлен на максимум. Правда в файле error_log есть такое:

[07-May-2014 18:27:58 UTC] Default exception handler: Sorry, the requested file could not be found Debug:
Error code: filenotfound
* line 476 of /lib/setuplib.php: moodle_exception thrown
* line 1991 of /lib/filelib.php: call to print_error()
* line 4403 of /lib/filelib.php: call to send_file_not_found()
* line 38 of /pluginfile.php: call to file_pluginfile()
но мне это ни о чем не говорит.

Учетные записи создавались самими студентами с помощью плагина Не использовать аутентификацию. Там если студент ошибается при вводе логина, то создается учетная запись, где имя и фамилия обычно остаются незаполненными. Вот эти записи я и удаляю периодически. За раз удается удалить только штук 10. Т.е. эта ошибка похожа на MDL-35495, где тоже проблемы с удалением записей с незаполненным обязательным полем. Только там это e-mail, а у меня - имя и фамилия.

Используется mysql 5.1.73.

В ответ на Alexandre Scherbyna

Re: Error writing to database

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

хотя вывод отладочных сообщений установлен на максимум

И галка на debugdisplay стоит? Тогда РНР настроен так, что не выводит ошибки.

Правда в файле error_log есть такое

Это сообщение относится к ошибке в работе с файлами: filenotfound - не найден файл. К теме не имеет отношения.

Трудно разобраться, если ошибку не удается воспроизвести. Кроме того, все ошибки на баг-трекере пока в состоянии Unresolved, видимо, по той же причине - возникают не у всех, не на всех видах ПО сервера, и как-то спонтанно улыбаюсь

В ответ на Vadim Tabunshchik

Re: Error writing to database

от Alexandre Scherbyna -

Извините, галка не стояла смущаюсь. А с галкой вот что пишет:

Debug info: Duplicate entry '1-5.1399554676' for key 'mdl_user_mneuse_uix'
UPDATE mdl_user SET deleted = ?,username = ?,email = ?,idnumber = ?,picture = ?,timemodified = ? WHERE id=?
[array (
0 => 1,
1 => '5.1399554676',
2 => '9f6e6800cfae7749eb6c486619254b9c',
3 => '',
4 => 0,
5 => 1399554676,
6 => '2343',
)]
Error code: dmlwriteexception
Stack trace:
  • line 426 of /lib/dml/moodle_database.php: dml_write_exception thrown
  • line 1195 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
  • line 1227 of /lib/dml/mysqli_native_moodle_database.php: call to mysqli_native_moodle_database->update_record_raw()
  • line 4106 of /lib/moodlelib.php: call to mysqli_native_moodle_database->update_record()
  • line 30 of /admin/user/user_bulk_delete.php: call to delete_user()
В ответ на Alexandre Scherbyna

Re: Error writing to database

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

У вас дубль в уникальном индксе mdl_user_mneuse_uix. PHPmyadmin говорит, что это индекс по паре mnethostid и username. Это значит, что в системе уже есть пользователь с такого хоста mnet с таким логином. в mnethostid  в основном стандартные значения идут,скорее всего дело не в нём,  а в повторе придумываемого случайно (или псевдослучайно) имени для удалённого пользователя. Возможно у вас настолько много удалённых пользователей, что пошли повторы. Попробуйте поудалять из базы пользователей с пометкой deleted, предварительно сделав резервную копию

В ответ на Vadim Dvorovenko

Re: Error writing to database

от Alexandre Scherbyna -

Ответил другой Вадим. Спасибо. улыбаюсь  Но тогда я не могу понять почему это наблюдается на сайтах, где авторизация через mnet выключена, и почему каждый раз удается удалить примерно 10 пользователей. Причем записи, вызвавшие ошибку, при повторении той же команды успешно удаляются.

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

Прикрепляю выборку из таблицы mdl_user именно тех записей, при удалении которых возникает эта ошибка. Вопрос что с этим делать остается открытым.

(Редактировал(а) David Mudrák - Воскресенье, 18 Май 2014, 21:44) - removing the attached SQL dump as it contains sensitive user credentials

В ответ на Alexandre Scherbyna

Re: Error writing to database

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

Александр, даже разработчики пока ещё не вылечили этот баг.

Что же я могу посоветовать в таком случае?

Вы же знаете, что при удалении пользователя в Moodle из базы данных запись не удаляется, а помечается особым образом: в поле deleted ставится единичка, в значение поля username переносится адрес email+время удаления в формате unixtime, в поле email появляется какой-то хеш.

В Вашем же примере - поле email пустое, может, поэтому и ошибка при удалении.