Difference between revisions of "Миграция в базу данных"
(Created page with "Навигация: Главная страница/Система ejudge/Использование/Миграция в базу данных") |
(...) |
||
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.
Contents
Миграция базы пользователей
С базой пользователей работает компонент 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 теряется, но там не хранится ничего ценного.