title | date | ategories | description | weight | menu | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Restore the GraphDB |
2023-10-19T13:52:23-03:00 |
|
How to restore a backup of the Rhize Graph DB. |
200 |
|
This guide shows you how to restore the Graph database in your Rhize environment.
Before you start, ensure you have the following:
- The GraphDB Helm chart
kubectl
- A [Database backup]({{< relref "../backup/graphdb" >}})
-
Confirm the cluster and namespace are correct.
{{% param k8s_cluster_ns %}}
-
Change to the {{< param application_name >}}-baas helm chart overrides,
baas.yaml
. Setalpha.initContainers.init.enable
totrue
. -
Upgrade or install the Helm chart.
helm upgrade --install -f baas.yaml {{< param application_name >}}-baas {{< param application_name >}}/baas -n {{< param application_name >}}
-
In the Alpha 0 initialization container, create the backup directory.
kubectl exec -t {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha-init -- \ mkdir -p /dgraph/backups
-
If the backup directory does not have a checksums file, create one.
sha256sum ./<PATH_TO_BACKUP>/*.gz > ./<PATH_TO_BACKUP>/backup.sums
-
Copy the backup into the initialization container.
kubectl cp --retries=10 ./<PATH_TO_BACKUP> \ {{< param application_name >}}-baas-alpha-0:/dgraph/backups/<PATH_TO_BACKUP> \ -c {{< param application_name >}}-baas-alpha-init
After the process finishes, confirm that the checksums match:
kubectl exec -it {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha-init -- \ 'sha256sum -c /dgraph/backups/<PATH_TO_BACKUP>/backup.sums /dgraph/backups/<PATH_TO_BACKUP>/*.gz'
-
Restore the backup to the restore directory. Replace the
<PATH_TO_BACKUP>
and<NAMESPACE>
in the arguments for the following command:kubectl exec -t {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha-init -- \ dgraph bulk -f /dgraph/backups/<PATH_TO_BACKUP>/g01.json.gz \ -g /dgraph/backups/<PATH_TO_BACKUP>/g01.gql_schema.gz \ -s /dgraph/backups/<PATH_TO_BACKUP>/g01.schema.gz \ --zero={{< param application_name >}}-baas-zero-0.{{< param application_name >}}-baas-zero-headless.<NAMESPACE>.svc.cluster.local:5080 \ --out /dgraph/restore --replace_out
-
Copy the backup to the correct directory:
kubectl exec -t {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha-init -- \ mv /dgraph/restore/0/p /dgraph/p
-
Complete the initialization container for alpha 0.
kubectl exec -t {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha-init -- touch /dgraph/doneinit
-
Wait for
{{< param application_name >}}-baas-alpha-0
to start serving the GraphQL API. -
Make a database mutation to force a snapshot to be taken. For example, create a
UnitOfMeasure
then delete it:kubectl exec -t {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha -- \ curl --location --request POST 'http://localhost:8080/graphql' \ --header 'Content-Type: application/json' \ --data-raw '{"query":"mutation RestoringDatabase($input:[AddUnitOfMeasureInput!]!){\r\n addUnitOfMeasure(input:$input){\r\n unitOfMeasure{\r\n id\r\n dataType\r\n code\r\n }\r\n}\r\n}","variables":{"input":[{"code":"Restoring","isActive":true,"dataType":"BOOL"}]}}'
Wait until you see {{< param application_name >}}-baas creating a snapshot in the logs. For example:
$ kubectl logs {{< param application_name >}}-baas-alpha-0 ++ hostname -f ++ awk '{gsub(/\.$/,""); print $0}' ... I0314 20:32:21.282271 19 draft.go:805] Creating snapshot at Index: 16, ReadTs: 9
Revert any database mutations:
kubectl exec -t {{< param application_name >}}-baas-alpha-0 -c {{< param application_name >}}-baas-alpha -- \ curl --location --request POST 'http://localhost:8080/graphql' \ --header 'Content-Type: application/json' \ --data-raw '{"query":"mutation {\r\n deleteUnitOfMeasure(filter:{code:{eq:\"Restoring\"}}){\r\n unitOfMeasure{\r\n id\r\n }\r\n }\r\n}","variables":{"input":[{"code":"Restoring","isActive":true,"dataType":"BOOL"}]}}'
-
Complete the initialization container for alpha 1:
kubectl exec -t {{< param application_name >}}-baas-alpha-1 -c {{< param application_name >}}-baas-alpha-init -- \ touch /dgraph/doneinit
And alpha 2:
kubectl exec -t {{< param application_name >}}-baas-alpha-2 -c {{< param application_name >}}-baas-alpha-init -- \ touch /dgraph/doneinit