Восстановление внутренних баз данных
Требования
-
База данных развернута внутри кластера Kubernetes, в котором установлена система.
-
S3-совместимое хранилище для хранения резервных копий, например: MinIO, AWS S3, Yandex Object Storage.
-
Остановлены все приложения, которые записывали данные в восстанавливаемую базу данных.
-
Доступ к утилитам kubectl, helm и evoctl.
Восстановление базы данных PostgreSQL
Доступны следующие сценарии восстановления базы данных PostgreSQL:
| При восстановлении все текущие данные в базе данных будут удалены. Рекомендуется предварительно проверить восстановление на тестовом кластере. |
Восстановление из последней резервной копии
Чтобы восстановить базу данных:
-
Подключитесь к кластеру, в котором развернута база данных.
-
Запустите процесс восстановления, выполнив команду:
helm upgrade postgresql /opt/r-vision/infra/helm/postgresql \ --reuse-values \ --set backupWrapper.restore.enabled=true --set primary.replicaCount=0 \ --set backupWrapper.restore.cleanDataDir=true \ --timeout 30mПосле применения команды все текущие данные в базе данных PostgreSQL будут удалены. Если у вас большое количество данных, рекомендуется увеличить значение параметра --timeout. -
После восстановления базы данных запустите под PostgreSQL и уберите флаги восстановления. Для этого выполните команду:
helm upgrade postgresql /opt/r-vision/infra/helm/postgresql \ --reuse-values \ --set primary.replicaCount=1 \ --set backupWrapper.restore.enabled=false -
Дождитесь восстановления пода базы данных PostgreSQL.
Восстановление из конкретной резервной копии
Чтобы восстановить базу данных:
-
Подключитесь к кластеру, в котором развернута база данных.
-
Посмотрите список резервных копий, выполнив команду:
kubectl exec -it <postgresql> -c backup-wrapper -- wal-g backup-listЗдесь:
-
<postgresql>— имя пода, на котором развернута база данных PostgreSQL. Например,postgresql-0.
-
-
Восстановите базу данных, выполнив команду:
helm upgrade <postgresql> . --reuse-values \ --set primary.replicaCount=0 \ --set backupWrapper.restore.enabled=true \ --set backupWrapper.restore.backupName=<backup_name> \ --timeout 30mПосле применения команды все текущие данные в базе данных PostgreSQL будут удалены. Если у вас большое количество данных, рекомендуется увеличить значение параметра --timeout.Здесь:
-
<postgresql>— имя пода, на котором развернута база данных PostgreSQL. Например,postgresql-0. -
<backup_name>— название резервной копии, например,base_000000010000000000000005.
-
-
После восстановления запустите под PostgreSQL и уберите флаги восстановления. Для этого выполните команду:
helm upgrade <postgresql> --reuse-values \ --set primary.replicaCount=1 \ --set backupWrapper.restore.enabled=falseЗдесь:
-
<postgresql>— имя пода, на котором развернута база данных PostgreSQL. Например,postgresql-0.
-
-
Дождитесь восстановления пода базы данных PostgreSQL.
Восстановление базы данных ClickHouse
| При восстановлении все текущие данные в базе данных будут удалены. Рекомендуется предварительно проверить восстановление на тестовом кластере. |
Чтобы восстановить базу данных:
-
Подключитесь к кластеру, в котором развернута база данных.
-
Укажите переменные окружения для задачи (job) восстановления, выполнив команду:
JOB_NAME="restore-ch-$(date +%s)" NAMESPACE="<namespace>"Здесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
-
Создайте новую задачу из существующего контроллера CronJob, выполнив команду:
kubectl get cronjob clickhouse-backup-shard0 -n "$NAMESPACE" -o json | \ jq --arg name "$JOB_NAME" '{ apiVersion: "batch/v1", kind: "Job", metadata: {name: $name, namespace: .metadata.namespace}, spec: .spec.jobTemplate.spec } | .spec.template.spec.containers[0].command = ["/bin/sh", "-c", "echo READY && sleep 7200"] | .spec.template.spec.containers[0].args = [] | .spec.activeDeadlineSeconds = 7200 | .spec.template.spec.restartPolicy = "Never" ' | kubectl apply -n "$NAMESPACE" -f - -
Дождитесь запуска задания (job). Для отслеживания статуса выполните команду:
kubectl wait --for=condition=Ready pod -l "job-name=$JOB_NAME" \ -n "$NAMESPACE" --timeout=120s -
Подключитесь к поду заданий (job), выполнив команду:
kubectl exec -it -n "$NAMESPACE" "job.batch/$JOB_NAME" -- /bin/sh -
Задайте в переменной
S3_PATHпуть до директории S3-совместимого хранилища, где хранятся резервные копии. Для этого выполните команду:export S3_PATH="<path_to_backups>"Здесь:
-
<path_to_backups>— путь до директории S3-совместимого хранилища с резервными копиями. Например,backups/clickhouse/shard0/2026/02/09.
-
-
Откройте список доступных резервных копий, выполнив команду:
clickhouse-backup list remote -
Восстановите базу данных, выполнив команду:
clickhouse-backup restore_remote <backup_name>Здесь:
-
<backup_name>— название резервной копии.
После применения команды все текущие данные в базе данных ClickHouse будут удалены. Для восстановления конкретной таблицы в базе данных выполните команду:
clickhouse-backup restore_remote <backup_name> --tables "<database>.<table_pattern>"Здесь:
-
<backup_name>— название резервной копии. -
<database>— название базы данных. -
<table_pattern>— название или шаблон названия таблицы.
-
-
Проверьте, что восстановление прошло успешно, с помощью команды:
clickhouse-backup list local -
После завершения отключитесь от пода, выполнив команду:
exit -
Удалите задание (job) восстановления базы данных, выполнив команду:
kubectl delete job "$JOB_NAME" -n "$NAMESPACE"
Была ли полезна эта страница?