Миграция в базу данных

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Миграция в базу данных

В данном документе описывается процедура миграции данных в базу данных MySQL/MariaDB. Для выполнения процедуры необходима версия ejudge не ниже 3.10.0.

В ранних версиях ejudge табличная информация хранилась в файлах, кроме того, для некоторых данных поддерживается храниене в MongoDB, хотя поддерживать MongoDB далее не планируется. В качестве основного хранилища будет использоваться только MySQL/MariaDB.

Миграция базы пользователей

С базой пользователей работает компонент ej-users. Создание базы пользователей и начальное наполнение должно выполняться при начальной инсталляции ejudge.

Тем не менее, если база пользователей хранится в XML-файлах, конвертировать её в таблицы MySQL можно с помощью компоненты ej-users, запущенной в режиме конвертации.

ej-users --convert --from-plugin xml --to-plugin mysql

Миграция базы посылок

С базой посылок работает компонент ej-contests. Если ejudge был сконфигурирован с поддержкой MySQL/MariaDB посылки будут сразу храниться в базе данных.

Если по какой-то причине таблица посылок хранится в файле run.log, конвертировать её в базу данных можно с помощью утилиты ej-convert-runs.

ej-convert-runs CONTEST-ID file mysql

Конвертация выполняется для каждого турнира отдельно.

После конвертации рекомендуется добавить в конфигурационный файл ejudge.xml элемент

<default_rundb_plugin>mysql</default_rundb_plugin>

Рекомендуется не использовать глобальный конфигурационный параметр rundb_plugin, а если он где-то используется, удалить его из конфигурационных файлов serve.cfg каждого турнира.

Миграция базы сообщений

С базой сообщений работает компонент ej-contests.

Если ejudge был сконфигурирован с поддержкой MySQL/MariaDB сообщения будут сразу храниться в базе данных.

Если по какой-то причине таблица сообщений хранится в файле clars.log, конвертировать её в базу данных можно с помощью утилиты ej-convert-clars.

ej-convert-clars CONTEST-ID file mysql

Конвертация выполняется для каждого турнира отдельно.

После конвертации рекомендуется добавить в конфигурационный файл ejudge.xml элемент

<default_clardb_plugin>mysql</default_clardb_plugin>

Рекомендуется не использовать глобальный конфигурационный параметр clardb_plugin, а если он где-то используется, удалить его из конфигурационных файлов serve.cfg каждого турнира.

Миграция базы состояния турниров

С базой работает компонент ej-contests. В базе состояния турниров хранится текущее состояние турнира.

Поддерживается три хранилища: file, mongo и mysql (с версии 3.10.0). По умолчанию состояние турнира хранится в файле status с помощью хранилища file.

Чтобы конвертировать хранение состояния турниров в mysql используется утилита ej-convert-status. Конвертировать состояния всех турниров в базу MySQL/MariaDB можно с помощью команды:

ej-convert-status --force-from --all --to mysql

Для каждого турнира его статус будет залит в MySQL/MariaDB. Утилита работает корректно даже в случае, когда часть турниров хранит информацию в file, а часть в mongo.

После конвертации рекомендуется добавить в конфигурационный файл ejudge.xml элемент

<default_status_plugin>mysql</default_status_plugin>

либо изменить его на mysql, если он уже присутствует в файле.

Затем нужно удалить использование глобального конфигурационного параметра status_plugin из конфигурационного файла serve.cfg каждого турнира.

Миграция базы состояния пользователей

С базой работает компонент ej-contests. В базе состояния пользователей хранится состояние пользователей в каждом турнире, например, прочитанные сообщения и т. п.

Поддерживается три хранилища: file, mongo и mysql (с версии 3.10.0). По умолчанию состояние пользователей хранится в файлах с помощью хранилища file.

Чтобы конвертировать хранение состояния пользователей в mysql используется утилита ej-convert-xuser. Конвертировать состояния всех пользователей всех турниров в базу MySQL/MariaDB можно с помощью команды:

ej-convert-xuser --force-from --all --to mysql

Для каждого пользователя каждого турнира его статус будет залит в MySQL/MariaDB. Утилита работает корректно даже в случае, когда часть турниров хранит информацию в file, а часть в mongo.

После конвертации рекомендуется добавить в конфигурационный файл ejudge.xml элемент

<default_xuser_plugin>mysql</default_xuser_plugin>

либо изменить его на mysql, если он уже присутствует в файле.

Затем нужно удалить использование глобального конфигурационного параметра xuser_plugin из конфигурационного файла serve.cfg каждого турнира.

Миграция базы вариантов

С базой вариантов работает компонент ej-contests. В базе вариантов хранятся варианты задач, назначенные пользователям в турнирах.

Поддерживается два хранилища: file и mysql (с версии 3.10.0). По умолчанию состояние пользователей хранится в файле variant.map с помощью хранилища file.

Чтобы конвертировать хранение вариантов в mysql используется утилита ej-convert-variant. Конвертировать варианты всех пользователей всех турниров в базу MySQL/MariaDB можно с помощью команды:

ej-convert-variant --force-from --all --to mysql

Для каждого пользователя каждого турнира назначенные варианты будут залиты в MySQL/MariaDB. Утилита работает корректно даже в случае, когда только часть турниров хранит информацию в file.

После конвертации рекомендуется добавить в конфигурационный файл ejudge.xml элемент

<default_variant_plugin>mysql</default_variant_plugin>.

Миграция базы аватаров

База аватаров используется для временного хранения аватара в процессе его редактирования. После того, как аватар отредактирован, он хранится в файловой системе, где обрабатывается веб-сервером непосредственно.

Поэтому достаточно просто переключить формат хранения с mongo на mysql.

Рекомендуется добавить в конфигурационный файл ejudge.xml элемент

<default_avatar_plugin>mysql</default_avatar_plugin>

либо изменить его на mysql, если он уже присутствует в файле.

Миграция состояния телеграм-бота

Начиная с версии 3.10.0 телеграм-бот хранит свое состояние в базе MySQL/MariaDB вместо mongo. Старое состояние в mongo теряется, но там не хранится ничего ценного.