Help:Backup: Difference between revisions

From Svacer Wiki
(update snapshots import/export permissions description)
(update due to client/server binaries split)
Line 1: Line 1:
== Создание и восстановление резервной копии ==
== Создание и восстановление резервной копии ==
=== Если PostgreSQL запущен в виде сервиса ===
=== Если PostgreSQL запущен в виде сервиса ===
Если PostgreSQL запущен в виде сервиса (т.е. не в докер-контейнере), то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:
Если PostgreSQL запущен в виде сервиса, то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:
     sudo su -l postgres
     sudo su -l postgres
Line 10: Line 10:
В результате дамп БД будет создан в файле svacer.sql
В результате дамп БД будет создан в файле svacer.sql


Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление
Для восстановления БД из дампа перейдите в пользователя postgres и запустите восстановление
 
     sudo su -l postgres  
     sudo su -l postgres  
     psql -f svacer.sql svacer_db  
     psql -f svacer.sql svacer_db  
Line 38: Line 39:
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''.
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''.


     svacer server --pg <postgres_url> --store /home/svacer/new-store --load-from-backup <filename>.kvbak
     svacer-server run --pg <postgres_url> --store /home/svacer/new-store --load-from-backup <filename>.kvbak


Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой.
Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой.


=== Бэкап object store в сервере PostgreSQL ===
=== Бэкап object store в сервере PostgreSQL ===
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Этот способ хорошо подходит в случае, если object store не очень большой, в пределах нескольких гигабайт.
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Этот способ хорошо подходит в случае, если object store не очень большой, в пределах нескольких гигабайт.
 
Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.


Создание бэкапа:
Создание бэкапа:
Line 71: Line 70:
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:


     svacer server --load-from-pg-backup=<id>
     svacer-server run --load-from-pg-backup=<id>


где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
Line 79: Line 78:
     svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>
     svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>


где <lower> и <upper> нижняя и верхняя граница ID бэкапов.
где <lower> и <upper> нижняя и верхняя граница ID бэкапов.


=== Бэкап object store вручную ===
=== Бэкап object store вручную ===
Создать резервную копию object store возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед этим желательно остановить сервер Svacer для обеспечения целостности данных. Этот способ хорошо подходит в случае, если object store достаточно большой (десятки гигабайт или больше) и возможно останавливать сервер Svacer. Для инкрементального бэкапа в данном случае можно использовать '''rsync'''.
Создать резервную копию object store возможно вручную. Для этого достаточно скопировать директорию object store. Перед этим желательно остановить сервер Svacer для обеспечения целостности данных. Этот способ хорошо подходит в случае, если object store достаточно большой (десятки гигабайт или больше) и возможно останавливать сервер Svacer. Для инкрементального бэкапа в данном случае можно использовать '''rsync'''.


Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:
Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он создается в следующей директории:


* ~/.cache/svacer — в OC Linux
* ~/.cache/svacer — в OC Linux
* %LocalAppData%\svacer — в ОС Windows
* %LocalAppData%\svacer — в ОС Windows (например, С:\Users\myusername\AppData\Local\svacer)
 
(например, С:\Users\myusername\AppData\Local\svacer)


При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:
При восстановлении из резервной копии поместите файлы object store в директорию по умолчанию (см. выше), либо в другую директорию и при запуске сервера Svacer укажите путь к ней одним из способов:


# Перед запуском Svacer установить переменную окружения SVACER_OBJECT_STORE, например:
* В переменной окружения SVACER_OBJECT_STORE:
#: export SVACER_OBJECT_STORE=/home/user/data/object_store
  export SVACER_OBJECT_STORE=/home/user/data/object_store
# При запуске Svacer передать путь к object store в параметре --store, например:
  svacer-server run
#: svacer --store /home/user/data/object_store
* В параметре --store:
  svacer-server run --store /home/user/data/object_store


При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной '''STORE''' в файле '''docker-compose.yml'''. Допустим, директория с object store была скопирована в '''/home/user/data/object_store'''. В таком случае параметры нужно указать следующим образом
При запуске Svacer в docker-контейнере смонтируйте директорию с object store в контейнер как volume и укажите путь к ней в переменной '''STORE''' в файле '''docker-compose.yml'''


     volumes:
     volumes:
Line 124: Line 122:
[[File:BranchMenu.png|none|left|alt=BranchMenu windows]]
[[File:BranchMenu.png|none|left|alt=BranchMenu windows]]


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


[[File:Notifications.png|none|left|alt=Notifications window]]
[[File:Notifications.png|none|left|alt=Notifications window]]

Revision as of 16:39, 8 May 2024

Создание и восстановление резервной копии

Если PostgreSQL запущен в виде сервиса

Если PostgreSQL запущен в виде сервиса, то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:

   sudo su -l postgres
   pg_dump --clean -T tmp_diff* svacer_db > svacer.sql

где svacer_db — имя БД.

В результате дамп БД будет создан в файле svacer.sql

Для восстановления БД из дампа перейдите в пользователя postgres и запустите восстановление

   sudo su -l postgres 
   psql -f svacer.sql svacer_db 

Если PostgreSQL запущен в docker-контейнере

Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду

   docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql

где:

  • svacer_postgres — имя docker-контейнера
  • postgres — имя пользователя, под учётной записью которого создана БД
  • svacer_db — имя БД

Для восстановления БД используйте команду

   cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db

Бэкап object store через command line API

Этот способ хорошо подходит в случае, если object store достаточно большой (десятки гигабайт или больше) и не желательно останавливать сервер Svacer. Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)

   svacer server backup --user admin --password <password> --file <filename>.kvbak

В результате object store будет сохранен в файл <filename>.kvbak

Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции --load-from-backup.

   svacer-server run --pg <postgres_url> --store /home/svacer/new-store --load-from-backup <filename>.kvbak

Восстановление возможно только в пустой object store. То есть в данном примере директория /home/svacer/new-store должна быть пустой.

Бэкап object store в сервере PostgreSQL

Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Этот способ хорошо подходит в случае, если object store не очень большой, в пределах нескольких гигабайт.

Создание бэкапа:

   svacer server backup --user admin --password <password> --pg

Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout

   ID = 23 CREATE_TS = 2022-10-06T06:04:33Z 

Для печати списка существующих бэкапов используется команда:

   svacer server backup --user admin --password <password> --list-pg

Результат печатается в stdout и включает ID и время создания бэкапа

    2022-10-06T09:04:36.929+0300    info    Quering server configuration from http://localhost:8080/api/public/server/info
    2022-10-06T09:04:36.930+0300    info    Server configuration grpc = 3002, rest = 8080
    2022-10-06T09:04:36.939+0300    info    Logged by user admin
    2022-10-06T09:04:36.941+0300    info    Backups:
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z

Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:

   svacer-server run --load-from-pg-backup=<id>

где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.

Для очистки старых бэкапов используется следующая команда:

   svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>

где <lower> и <upper> — нижняя и верхняя граница ID бэкапов.

Бэкап object store вручную

Создать резервную копию object store возможно вручную. Для этого достаточно скопировать директорию object store. Перед этим желательно остановить сервер Svacer для обеспечения целостности данных. Этот способ хорошо подходит в случае, если object store достаточно большой (десятки гигабайт или больше) и возможно останавливать сервер Svacer. Для инкрементального бэкапа в данном случае можно использовать rsync.

Если директория, где хранить object store не была явно указана при запуске сервера, по умолчанию он создается в следующей директории:

  • ~/.cache/svacer — в OC Linux
  • %LocalAppData%\svacer — в ОС Windows (например, С:\Users\myusername\AppData\Local\svacer)

При восстановлении из резервной копии поместите файлы object store в директорию по умолчанию (см. выше), либо в другую директорию и при запуске сервера Svacer укажите путь к ней одним из способов:

  • В переменной окружения SVACER_OBJECT_STORE:
 export SVACER_OBJECT_STORE=/home/user/data/object_store
 svacer-server run 
  • В параметре --store:
 svacer-server run --store /home/user/data/object_store

При запуске Svacer в docker-контейнере смонтируйте директорию с object store в контейнер как volume и укажите путь к ней в переменной STORE в файле docker-compose.yml

   volumes:
     - /home/user/data:/data
   environment:
     - STORE=/data/object_store

Перенос снимков

Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса. Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных.

Экспорт и импорт снимков доступен пользователям с соответствующими правами для выбранного проекта/ветки.

Перенос из веб интерфейса

Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:

SnapshotInfo window

либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):

CreateNewProject window

Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки

BranchMenu windows

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

Notifications window

А так же будет доступно в панели нотификаций

NotificationsClearAll window

Перенос из командной строки

Экспорт и импорт снимков из командной строки доступен пользователям с соответствующими правами для выбранного проекта/ветки.

Экспорт снимков:

   svacer server export
       --user <user> 
       --password <pwd> 
       --host <host> 
       --port <port> 
       --grpc <grpc port> 
       --project <project name or id> 
       --branch <branch name or id> 
       --snapshot <snapshot name or id> 
       <output file name>

Импорт снимков:

   svacer server import
       --user <user> 
       --password <pwd> 
       --host <host> 
       --port <port> 
       --grpc <grpc port> 
       --project <project name or id> 
       --branch <branch name or id> 
       --name <new name for snapshot>
       [--force]
       <input file name>

Опция --force создаст проект и ветку, если их не было на сервере.

Перенос Svacer с одного сервера на другой

  1. Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе Создание и восстановление резервной копии.
  2. Перенесите созданные файлы резервных копий на нужный сервер
  3. Восстановите данные из резервной копии на новом сервере