Восстановление БД биллинга из резервной копии.

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (33)

просмотр истории страницы
{anchor:failover}

h21. Отказоустойчивость БД биллинга

В 99% случаев БД повреждается при отключении питания. Поэтому, в [системных требованиях|http://docs.carbonsoft.ru/48693408] прописано обязательное наличие настроенного [UPS|http://docs.carbonsoft.ru/51380480] для штатного завершения работы сервера.
Если UPS настроить в ближайшее время нет возможности воспользуйтесь статьёй [Как повысить выживаемость БД при сбоях питания|http://docs.carbonsoft.ru/68845609]




{info}Восстановление баз данных, повреждённых в результате нарушения любых рекомендаций CarbonSoft по реализации отказоустойчивости сервера (UPS, параметры монтирования раздела БД, повреждение в результате тех. работ и т.д.), не входит в компетенцию компании и не включено SLA.{info}

h21. Возможные причины повреждения БД и остановки работы биллинга.

Работа биллинга может быть остановлена по двум причинам:
#* Нехватка свободного места на одном из разделов, в результате чего система мониторинга останавливает работу биллинга до момента очистки места ([инструкция|#emptyspace]).

h21. Восстановление БД в web-интерфейсе

При остановке работы биллинга по одной из вышеуказанных причин, Вы можете воспользоваться возможностью восстановления биллинга в web-интерфейсе.
!backup_web_4.png|border=1,width=1000!

h1. Восстановление БД из консоли

h2. Восстановление БД из консоли

{color:#000000}{*}Резервное копирование и восстановление из бекапов при помощи WinSCP{*}{color}


Процесс восстановления данных из бекапов можно разбить на два шага:
*ШАГ 1: Копирование данных с сервера.*
h2. ШАГ 1: Копирование данных с сервера

Подключаемся к серверу на 33 или 22 порт, либо иной порт, в зависимости от Ваших настроек
*Примечание*: Восстановиться можно из локальных бэкапов, которые хранятся в /mnt/backup/app/asr_billing/backup/ Эти бэкапы не архивированные, поэтому при восстановлении из бэкапа пункт 1 ШАГа 2 нужно пропустить. Данные бэкапы делаются автоматически каждый день, если в разделе /mnt/backup/ достаточно места.

*ШАГ 2: Восстановление из бэкапа.*
h2. ШАГ 2: Восстановление из бэкапа

# Подготовка
h3. 1. Подготовка
Восстанавливать БД можно из локального бэкапа (Дневной, Недельный, Месячный) либо из бэкапа, который копируется на FTP сервер. На FTP сервере бэкапы хранятся в архиве, поэтому после копирования на сервер с биллингом их нужно распаковать. Например имя бэкапа backup_daily_2016-30-21_02-53_asr_billing.tar.gz, тогда команда распаковки будет выглядеть вот так:
Перед выполнением операции, перейдите в директорию где лежит требуемая резервная копия. Допустим, требуется восстановить одну из локальных резервных копий. В таком, случае выполните следующую команду:
tar xzf backup_daily_2016-30-21_02-53_asr_billing.tar.gz /app/asr_billing/var/backup_data/billing.gdb.gbk -O > /mnt/backup/app/asr_billing/backup/billing.gdb.gbk
{code}
h3. 2. Распаковка БД
# Восстанавливаем БД из бэкапа. При восстановлении из локального бэкапа имя будет содержать дату и время, так вы поймете какой из бэкапов последний и наиболее актуальный. Допустим, что имя бэкапа billing.gdb.gbk, тогда сделать нужно следующее:
{code}
chroot /app/asr_billing/
exit
{code}
# Останавливаем биллинг
h3. 3. Остановка биллинга
{code}
/app/asr_billing/service stop
Переходите к пункту 4. В данном случае, биллинг уже является остановленным.
{note}
h3. 4. Сохранение текущей БД (опционально)
# Проверяем, что в /app/asr_billing/var/db есть файл billing.gdb.stop (это файл текущей БД)
Если он есть, то перемещаем его рядом (в этот же каталог) с указанием даты, например 2016-08-03 (позже можно будет удалить):
{code}
{note}Если же файла нет, то приступайте к пункту 5
Если произошел reset сервера (например по причине сбоя электропитания), то с высокой вероятностью база данных испортится, и файл БД переместится в /app/asr_billing/var/db/bad/billing.corrupt\*{note}
h3. 5. Перемещение файла БД на место остановленной базы
# Превращаем восстановленный бэкап в полноценную БД
{code}
chroot /app/asr_billing/
exit
{code}
h3. 6. Обновление БД до версии биллинга
# Запускаем скрипт обновления БД
{code}chroot /app/asr_billing/ update_hook.sh --force{code}
{warning}Обновление БД нужно запускать строго на остановленном биллинге\! Иначе это приведёт к разрушению базы.{warning}
h3. 7. Восстановление платежей
# Восстанавливаем финансовые операции, которые прошли после создания бэкапа, но до падения БД.\*
Пример, нужно восстановить данные за сентябрь 2016 года после восстановления БД в этот день.
{code}
{code}
{info} При восстановлении финансовых операций запись в [журнале платежей|http://http://docs.carbonsoft.ru/48693363] не появляется, т. е. в нем не отобразятся данные по платежам с момента сбоя базы данных до момента восстановления. {info}
h3. 8. Исправление счетчиков
# После восстановления всех финансовых операций, по-прежнему находясь в контейнере биллинга выполните следующую команду
{code}
python /usr/lib/python2.7/site-packages/python_tools/client_fix_scripts/fix_generators2.py
{code}
h3. 9. Запуск биллинга
# Запускаем биллинг
{code}
echo 'stop OK' > /app/asr_billing/var/lib/app.state
/app/asr_billing/service restart
{code}
h3. 10. Проверка на наличине ошибок
# Проверяем что все демоны стартовали и не растут ошибки
Для этого 2 раза подряд запускаем проверку сервера:
{code}
{code}

h21. Восстановление демонстрационной или пустой БД

*1.* Останавливаем биллинг
{code}

h21. Свободного места на диске критично мало {anchor:emptyspace}

Если после выполнения команды
{code}/app/asr_billing/service start {code}
Вы получаете достаточно объемный вывод, в конце которого содержится абзац следующего содержания:
{code}Свободного места на диске критично мало. Для предотвращения необратимых проблем, биллинг переходит в safe-mode. 
Освободите свободное место на диске и запустите команду /app/asr_billing/service start {code}
Порядок действий по восстановлению будет иной. В таком случае БД биллинга не повреждена, а остановлена для сохранности. Произведите следующие действия: