База данных

Материал из Rujel
Перейти к: навигация, поиск

РУЖЭЛЬ в стандартной поставке опирается на СУБД MySQL. Однако, использование именно этой СУБД не принципиально. Главное, чтобы для выбранной СУБД существовал драйвер JDBC. В комплекте с дистрибутивом РУЖЭЛЬ поставляются SQL-скрипты для создания БД и для обновления структуры БД с более старых версий. Эти скрипты заточены под MySQL, при использовании другой СУБД, возможно, придется их модифицировать.

Основные базы данных РУЖЭЛЬ[править]

В работе РУЖЭЛЬ используется несколько баз данных. Их наименования являются предметом настройки. Далее приводится описание в соответствии с первоначальными настройками в дистрибутиве.

  • RujelStatic - Многолетняя БД. Хранит данные, которые должны быть доступны в любом учебном году: Названия предметов, итоговые оценки...
  • RujelYear2011 - Однолетняя БД. Хранит актуальные для данного учебного года данные.
RujelYear2011 соответствует учебному году 2011/12. На каждый учебный год создается новая БД. (RujelYear2012, RujelYear2013...).
  • VseLists — БД-списки. Хранит данные о людях-участниках учебного процесса, а также о списочном составе учебных групп.
  • RujelUsers — список пользователей РУЖЭЛЬ. Хранит информацию о пользователях и данные для авторизации. В случае применения для авторизации LDAP, не хранит пароли, а служит для связи имени пользователя с записью преподавателя в БД-списки.
  • Contacts - контактные данные. Хранит информацию о контактных данных учащихся. В текущей версии — только адреса email, используемые для рассылки.

Полное описание задействованных таблиц структуры данных и связей между ними можно увидеть, зайдя с правами root в режим "Управление" -> "Системные процедуры" и нажав на ссылку "Model Report".

Резервное копирование[править]

Создание резервных копий баз данных делается штатными средствами СУБД. При использовании MySQL мы рекомендуем применение mysqldump. Команда

$ mysqldump -u root -p -r RujelBackup.sql -B RujelYear2011 RujelStatic Contacts VseLists RujelUsers

создаст файл RujelBackup.sql, содержащий SQL-скрипт для полного восстановления перечисленных в команде БД вместе с данными на момент копирования. Перед исполнением запросит пароль root-пользователя в mysql.

Можно использовать команду, которая сразу сожмет резервную копию в архив bz2:

$ mysqldump -u rujel --password=RUJELpassword -B RujelYear2011 RujelStatic Contacts VseLists RujelUsers | bzip2 -c > RujelBackup.bz2

здесь надо заменить RUJELpassword на реально используемый пароль (он хранится в файле настройки подключения к БД). Такая команда уже не запросит ввода пароля в интерактивном режиме, поэтому ее можно использовать для скриптов автоматического резервного копирования. Подробнее о применении команды mysqldump смотрите на сайте MySQL.

Использование скрипта[править]

Начиная с версии 0.9.3 в дистрибутив включен скрипт backup.sh, который выполняет резервное копирование, используя имя и пароль для подключения к БД из конфигурационных файлов РУЖЭЛЬ.

Скрипт принимает два параметра: что копировать и путь к директории, куда сохранять. Первый параметр может принимать значения:

  • day — копирует основные базы: RujelYear2015, RujelStatic и RujelSync. Для ежедневного бекапа.
  • week — копирует остальные базы: Contacts VseLists RujelUsers. Для еженедельного бекапа
  • db — копирует все базы данных, используемые РУЖЭЛЬ
  • conf — копирует настроечные файлы РУЖЭЛЬ
  • all — копирует всё вышеперечисленное

Если запуск скрипта осуществляется без параметров, то по-умолчанию копируется всё, а резервная копия сохраняется в текущую директорию.

При установке РУЖЭЛЬ версии 0.9.3 или выше на Linux, скрипт backup.sh устанавливается в директорию /usr/share/rujel/ . Также туда устанавливается оберточный скрипт backupCron.sh, который прописывается в /etc/crontab для автоматического запуска. Этот скрипт сохраняет резервные копии в директорию /var/lib/rujel/backup/, а весь вывод командной строки сохраняет в файле /var/lib/rujel/backup.log

Резервное копирование автоматически (по cron) запускается ежедневно с параметром day, еженедельно — с параметром week и ежемесячно — с параметром all.

Обратите внимание, что скрипт backup.sh ориентирован на стандартную установку. Поэтому, если у вас вносились изменения в пути до конфигурационных файлов, имена БД или их размещение на другом сервере, то скрипт может отрабатывать некорректно. Внесите в него необходимые исправления перед применением.

Восстановление данных[править]

Восстановить данные из резервной копии можно также, как и прочие SQL-скрипты — командной

$ mysql -u root -p < RujelBackup.sql

Из сжатого архива — командой

$ bzcat RujelBackup.bz2 | mysql -u root -p

Обновление структуры БД[править]

Если с новыми версиями РУЖЭЛЬ происходило изменение структуры БД, то при обновлении аналогичные изменения необходимо сделать и на Вашей системе.

Автоматическое обновление[править]

Начиная с версии 0.9.3 , РУЖЭЛЬ при запуске попытается самостоятельно обновить структуру БД, если она устарела. В большинстве случаев этого будет достаточно, и данная инструкция не понадобится.

Однако, в будущем может понадобиться создание дополнительных баз данных. Если установка РУЖЭЛЬ происходила до версии 0.9.3, то у пользователя rujel в MySQL недостаточно прав доступа, чтобы работать с базами с именами отличными от уже заявленных. Поэтому пользователю rujel следует дать такие права.

Это можно сделать в интерфейсе mysql

$ mysql -u root -p
> GRANT ALL PRIVILEGES ON `Rujel%`.* TO 'rujel'@'localhost';
> exit

Либо аналогично ручному способу обновления до версии 0.9.3

$ mysql -u root -p < SQL/updates/v_093.sql

Ручное обновление[править]

Для начала, надо выяснить, какая версия РУЖЭЛЬ установлена у вас. Если РУЖЭЛЬ запущен, то версию можно увидеть на экране входа в систему в нижнем правом углу (под полями для ввода имени и пароля).

В консоли версию РУЖЭЛЬ можно выяснить командой:

$ grep "RujelVersion" $NEXT_ROOT/Local/Library/WebObjects/Applications/Rujel.woa/Contents/Resources/Properties

Например, в случае свежей установки ШС 5.0.2 будет выведено:

RujelVersion=0.8.9

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

Далее надо определить, какие обновления БД нужно устанавливать. Для этого выведем список доступных обновлений:

$ ls SQL/updates/
old  v_09.sql  v_091.sql

Здесь мы видим, что доступны обновления до версии 0.9 и 0.9.1 (В директории old хранятся обновления для версий более старых, чем 0.8.7)

Поскольку наша версия 0.8.9 меньше, нам надо будет установить оба обновления.

Не забудьте перед выполнением обновления остановить приложения Rujel и RujelDiary
и сделать резервную копию своей базы данных!

$ mysql -u root -p < SQL/updates/v_09.sql
$ mysql -u root -p < SQL/updates/v_091.sql

После каждой команды система затребует пароль пользователя root в MySQL. (В ШС он совпадает с паролем системного пользователя root).

Создание БД для следующего учебного года[править]

ШС 5.0.2 вышел в 2010 году. Поэтому, на нем была заготовлена база данных только для 2010/11 учебного года.

Сейчас на дворе уже 2011/12, поэтому для нормальной работы надо подготовиться к новому году:

$ mysql -u root -p < SQL/nextYear2011.sql

Начиная с версии 0.9.3 РУЖЭЛЬ при запуске проверяет наличие базы данных текущего года. Если базы текущего года нет, а база предыдущего есть, то создание базы происходит автоматически.

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

Момент перехода к следующему году настраивается в PListWOEditor. По-умолчанию установлен на первое июля.