Автоматическая смена структуры базы данных

Z Freenetis Wiki
Přejít na: navigace, hledání


FreenetIS включает в себя механизм автоматического изменения структуры базы данных. Эти изменения выполняются после старта FreenetIS (после открытия браузера), после обновления ( здесь это не имеет значения , происходит ли это обновление через систему пакетов , или через развитие хранилища ) . Изменения не могут быть отменены , а это значит , что понижение версии FreenetIS не возможно ( конечно, это может быть выполнено вручную через восстановление базы данных из резервной копии, однако , мы не можем гарантироватькорректность конечного состояния системы ) .

Механизм обновления тесно связан с [ http://wiki.freenetis.org/index.php/Verzování_FreenetIS версий FreenetIS ] . В папке ' / db_upgrades находится файл с изменениями каждой версии FreenetIS . Имена файлов в формате ' upgrade_sql_VERZE.php ', где VERZE' заменяется версией FreenetIS . Сам файл должен содержатьполе $ upgrade_sql с индексом версии данного FreenetIS. Этот пункт содержит массив SQL операторов, которые выполняются последовательно. Он может также содержать PHP функции, которые выполняются до и после выполнения SQL- команд, которые используются, например, если данные не могут быть переданы между разными версиями непосредственно с помощью SQL команд. Обе функции могут содержать произвольные команды PHP и должна возвращать логическое значение (Boolean) .

Исходный файл изменений:

 <PHP определена ('SYSPATH') или умереть ("Нет прямого доступа скрипта. ')?;
 / *
  * Этот файл является частью открытого кода FreenetIS
  * И он выпущен под лицензией GPLv3.
  *
  * Более подробную информацию о лицензии можно найти:
  * http://www.gnu.org/licenses/gpl-3.0.html
  *
  * Более подробную информацию о проекте можно найти:
  * http://www.freenetis.org/
  *
  * /

/** This upgrade is equal to one in 1.0.0~beta2 developer revision */
$upgrade_equal_to['1.0.0~rc1'] = '1.0.0~beta2';

function upgrade_1_0_0_rc1_before()
{
    echo "Some PHP code triggered before processing of all SQL commands"
    return TRUE;
}

$upgrade_sql['1.0.0~rc1'] = array
(
    "ALTER TABLE `ifaces` CHANGE `device_id` `device_id` INT( 11 ) NOT NULL",

    "UPDATE ifaces i, wireless_ifaces wi
    SET wireless_mode = wmode, wireless_antenna = antenna
    WHERE wi.iface_id = i.id",

);

function upgrade_1_0_0_rc1_after()
{
    echo "Some PHP code triggered after processing of all SQL commands"
    return TRUE;
}


Связь между изменениями

Если любой из оператор SQL генерирует ошибку или некоторая функция возвращает FALSE, выполнение завершается, и ошибка отображается для пользователя. Когда возникает такая ситуация и FreeneIS выйходит из строя, мы рекомендуем вам обратиться к разработчику для восстановления последней рабочей версии базы данных (наряду с снижением версии FreenetIS).

Текущее состояние базы данных

Текущее состояние базы данных хранится в таблице базы данных в поле db_schema_version, которое содержит текущую версию базы данных. Если база данных находится в состоянии ошибки, этот шаг записывается в upgrade_midpoint_error. Это значение позволяет повторно выполнить обновление с этого шага, таким образом ошибка исправляется и повторно запускается браузера FreenetIS

Связь между изменениями

В этом примере есть пункт '$ upgrade_equal_to ['1 .0.0 ~ rc1'] ', который используется для целей разработки. (При слиянии изменений разных частей значение этого поля может заполнено разрабатываемой версией, которая содержит тот же набор команд (и функции). Если база данных находится в состоянии разработки и предлагается версия которая использует это поле относительно версии разработки. Пропустите эту версию. 'Файл с изменениями этой версии после выполнения операции будет удален!')

Переход от старых версий

Старые версии FreeneIS (до версии 1.0.0) включают в себя более раннюю версию механизма (на основе пересмотра SVN) . Если вы выполняете чистую установку новой базы данных , эта проблема вас не касается .

Переход между этот механизм может быть выполнена с использованием нескольких SVN команд.

1) Откройте терминал (командная строка) и перейдите в каталог с установкой FreenetISu , обычно :

$ Cd / Var / WWW / freenetis

2) Перейдите к последней редакции , чтобы обновить базу данных до выхода версии 1.0.0

$ Svn up-r 1559

3) Запуститебраузер FreenetIS и если корректировка осуществляется успешно перейдите к следующему шагу.

4) Перейти к последней версии FreenetIS . Новый механизм автоматически обнаруживает версию базы данных (старый тип) и осуществляет переход .

$ Svn up

Последний шаг однако не рекомендуется потому что начиная с релиза 1.0.0 выпала градация субверсий FreenetIS. Поэтому рекомендуется переустановка коробочной версии системы (Конечно, данные будут сохранены потому что даже при переустановке, вы можете выбрать исходную базу данных)


Безопасное изменение версии до 1.0.0

До версии FreenetIS 1.0.0 не обеспечивается безопасное одновременное внесение изменений. Эта проблема возникает, когда несколько людей / услуг FreenetIS осуществляют доступ к обновлению базы данных. Выполните следующие действия, чтобы избежать проблем при обновлении базы данных: ( '. Эта инструкция FreenetIS применима до версии 1.0.0, так как с этой версии (в комплекте) автоматически гарантируется правильная работа')

1) Выключите все услуги доступа к FreenetIS (CRON, redirect. QoS, monitoring, ...). Например CRON на Debian следующим образом:

 / etc / init.d / cron stop

2) Выключите сервер apache

 / etc/init.d/apache2 stop

3) Выполнение обновления

 wget http:// <path_to_mount_directory> ваш FreenetIS>

4) Перезапустите Apache и услуги

 / etc/init.d/apache2 start
 / etc / init.d / cron start