Удаляю пользователей через Администрирование ► Пользователи ► Учетные записи ► Действия над несколькими пользователями. За один раз удаляется не более десятка отфильтрованных пользователей и возникает ошибка Error writing to database. Включение отладки никакой дополнительной информации не дает. Ошибка наблюдалась и наблюдается во многих версиях: 2.5, 2.4, 2.3... Есть ли у знатоков какие-либо идеи, как с этим бороться?
Увы, никаких сообщений об ошибке кроме 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.
хотя вывод отладочных сообщений установлен на максимум
И галка на debugdisplay стоит? Тогда РНР настроен так, что не выводит ошибки.
Правда в файле error_log есть такое
Это сообщение относится к ошибке в работе с файлами: filenotfound - не найден файл. К теме не имеет отношения.
Трудно разобраться, если ошибку не удается воспроизвести. Кроме того, все ошибки на баг-трекере пока в состоянии Unresolved, видимо, по той же причине - возникают не у всех, не на всех видах ПО сервера, и как-то спонтанно
Извините, галка не стояла . А с галкой вот что пишет:
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
- 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()
Вадим, так эти сообщения вам говорят о чем-то?
У вас дубль в уникальном индксе mdl_user_mneuse_uix. PHPmyadmin говорит, что это индекс по паре mnethostid и username. Это значит, что в системе уже есть пользователь с такого хоста mnet с таким логином. в mnethostid в основном стандартные значения идут,скорее всего дело не в нём, а в повторе придумываемого случайно (или псевдослучайно) имени для удалённого пользователя. Возможно у вас настолько много удалённых пользователей, что пошли повторы. Попробуйте поудалять из базы пользователей с пометкой deleted, предварительно сделав резервную копию
Ответил другой Вадим. Спасибо. Но тогда я не могу понять почему это наблюдается на сайтах, где авторизация через mnet выключена, и почему каждый раз удается удалить примерно 10 пользователей. Причем записи, вызвавшие ошибку, при повторении той же команды успешно удаляются.
Напомню, что эти записи создаются в результате того, что человек ошибся при вводе своего логина. В результате ему открывается для заполнения новая учетная запись, но он ее не заполняет, а возвращается назад и вводит свой логин и пароль снова. В таком случае я не вижу причин, чтобы логины повторялись вообще, а тем более с одинаковой периодичностью.
Прикрепляю выборку из таблицы mdl_user именно тех записей, при удалении которых возникает эта ошибка. Вопрос что с этим делать остается открытым.
(Редактировал(а) David Mudrák - Воскресенье, 18 Май 2014, 21:44) - removing the attached SQL dump as it contains sensitive user credentials
Александр, даже разработчики пока ещё не вылечили этот баг.
Что же я могу посоветовать в таком случае?
Вы же знаете, что при удалении пользователя в Moodle из базы данных запись не удаляется, а помечается особым образом: в поле deleted ставится единичка, в значение поля username переносится адрес email+время удаления в формате unixtime, в поле email появляется какой-то хеш.
В Вашем же примере - поле email пустое, может, поэтому и ошибка при удалении.