Difference between revisions of "Миграция в базу данных"

From EjudgeWiki
 
(...)
 
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Миграция в базу данных]]
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Миграция в базу данных]]
 +
 +
В данном документе описывается процедура миграции данных в базу данных
 +
MySQL/MariaDB. Для выполнения процедуры необходима версия
 +
ejudge не ниже [[Изменения в версии 3.10.0|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>
 +
 +
Рекомендуется не использовать глобальный конфигурационный параметр
 +
<tt>[[serve.cfg:global:rundb_plugin|rundb_plugin]]</tt>,
 +
а если он где-то используется, удалить его из
 +
конфигурационных файлов [[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>
 +
 +
Рекомендуется не использовать глобальный конфигурационный параметр
 +
<tt>[[serve.cfg:global:clardb_plugin|clardb_plugin]]</tt>,
 +
а если он где-то используется, удалить его из
 +
конфигурационных файлов [[serve.cfg]] каждого турнира.
 +
 +
=== Миграция базы состояния турниров ===
 +
 +
С базой работает компонент [[ej-contests]]. В базе
 +
состояния турниров хранится текущее состояние турнира.
 +
 +
Поддерживается три хранилища: file, mongo и mysql
 +
(с версии [[Изменения в версии 3.10.0|3.10.0]]).
 +
По умолчанию состояние турнира хранится в файле <code>status</code>
 +
с помощью хранилища 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, если он уже присутствует в файле.
 +
 +
Затем нужно удалить использование
 +
глобального конфигурационного параметра
 +
<tt>[[serve.cfg:global:status_plugin|status_plugin]]</tt>
 +
из конфигурационного файла [[serve.cfg]] каждого турнира.
 +
 +
=== Миграция базы состояния пользователей ===
 +
 +
С базой работает компонент [[ej-contests]]. В базе
 +
состояния пользователей хранится состояние пользователей
 +
в каждом турнире, например, прочитанные сообщения и т. п.
 +
 +
Поддерживается три хранилища: file, mongo и mysql
 +
(с версии [[Изменения в версии 3.10.0|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, если он уже присутствует в файле.
 +
 +
Затем нужно удалить использование
 +
глобального конфигурационного параметра
 +
<tt>[[serve.cfg:global:xuser_plugin|xuser_plugin]]</tt>
 +
из конфигурационного файла [[serve.cfg]] каждого турнира.
 +
 +
=== Миграция базы вариантов ===
 +
 +
С базой вариантов работает компонент [[ej-contests]]. В базе
 +
вариантов хранятся варианты задач, назначенные
 +
пользователям в турнирах.
 +
 +
Поддерживается два хранилища: file и mysql
 +
(с версии [[Изменения в версии 3.10.0|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|3.10.0]] телеграм-бот
 +
хранит свое состояние в базе MySQL/MariaDB вместо mongo.
 +
Старое состояние в mongo теряется, но там не хранится ничего ценного.

Latest revision as of 09:14, 27 December 2022

Навигация: Главная страница/Система 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 теряется, но там не хранится ничего ценного.