Sauvegarde et restauration

Il est possible de sauvegarder, restaurer et archiver les données d'un cluster Couchbase en utilisant l'une des options suivantes :

  • Backup Service: via l'interface graphique de la console web de couchbase ou en ligne de commande avec CLI ou les APIs
  • cbbackupmgr: avec l'utilitaire de sauvegarde cbbackupmgr

Il est important de souligner que Couchbase offre une granularité de sauvegarde, de restauration et d'archivage beaucoup plus fine, permettant de sauvegarder, restaurer ou archiver toutes les données d'un ou plusieurs buckets, scopes, collections ou même des documents très spécifiques.

Backup Service ou cbbackupmgr?

Les deux solutions proposent des fonctionnalités de sauvegarde et de restauration pratiquement identiques, mais il existe quelques petites différences notables à signaler qui font que l'utilisation de l'une ou de l'autre dépend des besoins prévus.

cbbackupmgr est présent dans les versions EE et CE. Bien que la version EE offre des fonctionnalités beaucoup plus avancées, comme une granularité de sauvegarde pouvant être effectuée au niveau du bucket, du scope et de la collection, la version CE est limitée au niveau du bucket.

cbbackupmgr peut effectuer des sauvegardes de clusters distants, mais il est toujours incrémental sur le même référentiel. Lors de l'exécution d'une sauvegarde avec cbbackupmgr, une sauvegarde incrémentale est systématiquement effectuée, à l'exception de la première exécution où une sauvegarde complète (ou "full") est effectuée. Si vous souhaitez effectuer une sauvegarde complète régulièrement, vous devez créer un nouveau référentiel à chaque fois.

Le Backup Service, quant à lui, ne peut effectuer des sauvegardes que pour le serveur local. Cependant, il est possible de lancer une sauvegarde complète sans avoir à créer un nouveau référentiel. De plus, le Backup Service permet de créer un plan de sauvegarde plus élaboré en quelques clics seulement.

Dans la suite de cet article, nous allons présenter la solution cbbackupmgr. D'abord, c'est une solution qui peut être centralisée pour faire des sauvegardes de l'ensemble des clusters couchbase, et en plus, c'est une solution qui est disponible sur EE et CE.

Référentiel de sauvegarde (Backup Repositories)

Toutes les sauvegardes sont stockées et restaurées à partir d'un référentiel de sauvegarde. Ce dernier est à son tour stocké dans un archive de sauvegarde (Backup Archive) sur le système de fichiers.

Configuration des sauvegardes

Avant de commencer à utiliser cbbackupmgr, il est nécessaire de déterminer le répertoire où stocker toutes nos sauvegardes. Ce répertoire est appelé "archive de sauvegarde". L'archive de sauvegarde contient un ou plusieurs "référentiels de sauvegarde", qui sont les emplacements où vos sauvegardes seront conservées.

Rappelez-vous que, lorsque nous avions créé les conteneurs Docker, nous avions créé un volume qui était mappé sur /opt/couchbase/var sur chaque serveur Couchbase. Vous pouvez utiliser les commandes "docker volume ls" et "docker volume inspect" pour trouver le chemin complet sur le serveur hôte. C'est dans ce volume que nous allons créer notre répertoire "backup" qui servira d'archive de sauvegarde. Ce répertoire doit être créé sur les deux serveurs comme indiqué ci-dessous.

root@data-resilience:/app/couchbase# mkdir -p /var/lib/docker/500000.500000/volumes/couchbase_data1/_data/backup
root@data-resilience:/app/couchbase# mkdir -p /var/lib/docker/500000.500000/volumes/couchbase_data2/_data/backup
root@data-resilience:/app/couchbase# chown -R dockremap-user:dockremap-user /var/lib/docker/500000.500000/volumes/couchbase_data1/_data/backup
root@data-resilience:/app/couchbase# chown -R dockremap-user:dockremap-user /var/lib/docker/500000.500000/volumes/couchbase_data2/_data/backup

Créer un référentiel de sauvegarde pour l'ensemble du cluster:

# cbbackupmgr config -a /opt/couchbase/var/backup -r cluster
Backup repository `cluster` created successfully in archive `/opt/couchbase/var/backup`

Créer un référentiel de sauvegarde uniquement pour le bucket ecole-bucket:

# cbbackupmgr config -a /opt/couchbase/var/backup -r ecole_bkp \
--include-data ecole-bucket> 
Backup repository `ecole_bkp` created successfully in archive `/opt/couchbase/var/backup`

Créer un référentiel de sauvegarde uniquement pour la collection etudiant:

# cbbackupmgr config -a /opt/couchbase/var/backup -r etudiant_bkp \
--include-data ecole-bucket.ecole-scope.etudiant> 
Backup repository `etudiant_bkp` created successfully in archive `/opt/couchbase/var/backup`

Créer un référentiel de sauvegarde uniquement pour les index du bucket ecole-bucket:

# cbbackupmgr config -a /opt/couchbase/var/backup -r ecole_index_bkp \
--include-data ecole-bucket --disable-data> 
Backup repository `ecole_index_bkp` created successfully in archive `/opt/couchbase/var/backup`

Lister les référentiels

La commande suivante permet de lister tous les référentiels de sauvegarde déjà créés.

# cbbackupmgr info -a /opt/couchbase/var/backup --all
Name   | UUID                                 | Size | # Repos |
backup | 910951d2-a914-40d4-a7fe-ecc46139266c | 0B   | 4       |
*  Name    | Size | # Backups |
*  cluster | 0B   | 0         |
*  Name      | Size | # Backups |
*  ecole_bkp | 0B   | 0         |
*  Name            | Size | # Backups |
*  ecole_index_bkp | 0B   | 0         |
*  Name         | Size | # Backups |
*  etudiant_bkp | 0B   | 0         |

Lancer les auvegardes

Pour effectuer une sauvegarde des données du cluster, utilisez la commande 'cbbackupmgr backup'. Cette commande est la même pour tout type de sauvegarde, mais vous devez utiliser le paramètre --repo (-r) pour choisir le référentiel de sauvegarde à utiliser.

Dans ce premier exemple, nous allons lancer la sauvegarde du cluster en utilisant le référentiel de sauvegarde du cluster précédemment créé.

# cbbackupmgr backup -c 127.0.0.1 -u admin -p admin123 -a /opt/couchbase/var/backup -r cluster
Backing up to '2023-01-07T23_13_24.657151359Z'
Copied all data in 6.957s (Avg. 50.70KiB/Sec)                                                                                                            55 items / 304.22KiB
[================================================================================================================================================================== ] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 43.46KiB          | Sat, 07 Jan 2023 23:13:24 +0000/s | Sat, 07 Jan 2023 23:13:31 +0000 | 7.023s   |
| Bucket
| ------
| Name               | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| N1QL_SYSTEM_BUCKET | Succeeded | 133.61KiB   | 133.61KiB/s       | Sat, 07 Jan 2023 23:13:27 +0000 | Sat, 07 Jan 2023 23:13:29 +0000 | 1.262s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 0        | 0       | 0       | 16       | 0       | 0       | 0        | 0       | 0       |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 170.61KiB   | 170.61KiB/s       | Sat, 07 Jan 2023 23:13:30 +0000 | Sat, 07 Jan 2023 23:13:31 +0000 | 1.173s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 33       | 0       | 0       | 6        | 0       | 0       | 0        | 0       | 0       |
Backup completed successfully

Utiliser le référentiel ecole_bkp pour sauvegarder uniquement le bucket ecole-bucket.

# cbbackupmgr backup -c 172.18.56.11 -u admin -p admin123 -a /opt/couchbase/var/backup -r ecole_bkp
Backing up to '2023-01-07T23_17_55.219865973Z'
Copied all data in 2.347s (Avg. 85.31KiB/Sec)                                                                                                            39 items / 170.61KiB
[===================================================================================================================================================================] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 85.31KiB          | Sat, 07 Jan 2023 23:17:55 +0000/s | Sat, 07 Jan 2023 23:17:57 +0000 | 2.407s   |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 170.61KiB   | 170.61KiB/s       | Sat, 07 Jan 2023 23:17:56 +0000 | Sat, 07 Jan 2023 23:17:57 +0000 | 1.181s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 33       | 0       | 0       | 6        | 0       | 0       | 0        | 0       | 0       |
Backup completed successfully

Pour sauvegarder uniquement la collection etudiant, utiliser le référentiel etudiant_bkp.

# cbbackupmgr backup -c 172.18.56.11 -u admin -p admin123 -a /opt/couchbase/var/backup -r etudiant_bkp
Backing up to '2023-01-07T23_20_33.500512276Z'
Copied all data in 2.395s (Avg. 84.68KiB/Sec)                                                                                                            31 items / 169.37KiB
[===================================================================================================================================================================] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 84.68KiB          | Sat, 07 Jan 2023 23:20:33 +0000/s | Sat, 07 Jan 2023 23:20:35 +0000 | 2.471s   |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 169.37KiB   | 169.37KiB/s       | Sat, 07 Jan 2023 23:20:34 +0000 | Sat, 07 Jan 2023 23:20:35 +0000 | 1.256s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 25       | 0       | 0       | 6        | 0       | 0       | 0        | 0       | 0       |
Backup completed successfully

Et pour finir, utiliser le référentiel ecole_index_bkp pour sauvegarder uniquement les index du bucket ecole-bucket.

# cbbackupmgr backup -c 172.18.56.11 -u admin -p admin123 -a /opt/couchbase/var/backup -r ecole_index_bkp
Backing up to '2023-01-07T23_22_42.920573129Z'
Copied all data in 496ms (Avg. 0B/Sec)                                                                                                                           0 items / 0B
[===================================================================================================================================================================] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 0B                | Sat, 07 Jan 2023 23:22:42 +0000/s | Sat, 07 Jan 2023 23:22:43 +0000 | 538ms    |
Backup completed successfully

Utilisons à nouveau la commande 'cbbackupmgr info' pour afficher les sauvegarde. L'option '--all' permet d'afficher toutes les sauvegardes présentes dans l'archive de sauvegarde, tandis que l'option '--repo' permet d'afficher uniquement les sauvegardes du référentiel spécifié, comme dans l'exemple suivant.

Etant donné que c'est une première sauvegarde, le type est marqué comme étant 'FULL'

# cbbackupmgr info -a /opt/couchbase/var/backup -r cluster
Name    | Size    | # Backups |
cluster | 9.60MiB | 1         |
+  Backup                         | Size    | Type | Source    | Cluster UUID                     | Range | Events | Aliases | Complete |
+  2023-01-07T23_13_24.657151359Z | 9.60MiB | FULL | 127.0.0.1 | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |

Nous apportons quelques modifications à la collection 'étudiant' en ajoutant une ligne, puis nous relançons la sauvegarde.

# cbq -u admin -p admin123 -engine=http://127.0.0.1:8091/
 Connected to : http://127.0.0.1:8091/. Type Ctrl-D or \QUIT to exit.
 Path to history file for the shell : /root/.cbq_history 
cbq> INSERT INTO `ecole-bucket`.`ecole-scope`.etudiant (KEY, VALUE) VALUES ("etudiant26", { "nom": "Macron", "prenom": "Emmanuel", "email": "emmanuel.macron@example.com", "region": "Île-de-France", "ville": "Paris", "classe": ["Informatique"] });
{
    "requestID": "59330baf-5668-48d8-8862-a67b04296853",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "133.108208ms",
        "executionTime": "132.978477ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12,
        "mutationCount": 1
    }
}

Et la deuxième sauvegarde.

# cbbackupmgr backup -c 172.18.56.11 -u admin -p admin123 -a /opt/couchbase/var/backup -r cluster
Backing up to '2023-01-07T23_40_35.189343515Z'
Copied all data in 3.871s (Avg. 98.03KiB/Sec)                                                                                                             1 items / 294.09KiB
[================================================================================================================================================================== ] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 98.03KiB          | Sat, 07 Jan 2023 23:40:35 +0000/s | Sat, 07 Jan 2023 23:40:39 +0000 | 3.917s   |
| Bucket
| ------
| Name               | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| N1QL_SYSTEM_BUCKET | Succeeded | 131.31KiB   | 131.31KiB/s       | Sat, 07 Jan 2023 23:40:36 +0000 | Sat, 07 Jan 2023 23:40:37 +0000 | 995ms    |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 0        | 0       | 0       | 0        | 0       | 0       | 0        | 0       | 0       |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 162.78KiB   | 162.78KiB/s       | Sat, 07 Jan 2023 23:40:37 +0000 | Sat, 07 Jan 2023 23:40:39 +0000 | 1.094s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 1        | 0       | 0       | 0        | 0       | 0       | 0        | 0       | 0       |
Backup completed successfully

Cette fois, le type de sauvegarde est marqué comme étant 'INCR' (incrémental).

# cbbackupmgr info -a /opt/couchbase/var/backup -r cluster
Name    | Size    | # Backups |
cluster | 9.82MiB | 2         |
+  Backup                         | Size      | Type | Source       | Cluster UUID                     | Range | Events | Aliases | Complete |
+  2023-01-07T23_13_24.657151359Z | 9.60MiB   | FULL | 127.0.0.1    | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |
+  2023-01-07T23_40_35.189343515Z | 221.36KiB | INCR | 172.18.56.11 | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |

Nous allons faire la même chose pour la sauvegarde de la collection 'etudiant', en supprimant une ligne.

# cbq -u admin -p admin123 -engine=http://127.0.0.1:8091/
cbq> \SET -query_context default:`ecole-bucket`.`ecole-scope`;
cbq> SELECT count(*) FROM etudiant WHERE META().id = "etudiant1";
{
    "requestID": "53c16e93-71c1-4076-abe1-53680a1de42a",
    "signature": {
        "$1": "number"
    },
    "results": [
    {
        "$1": 1
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "417.502536ms",
        "executionTime": "417.402981ms",
        "resultCount": 1,
        "resultSize": 23,
        "serviceLoad": 12
    }
}
cbq> DELETE FROM etudiant WHERE META().id = "etudiant1";
{
    "requestID": "8b625a66-7654-4b59-b703-ff2701aceb7b",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "255.241356ms",
        "executionTime": "254.980897ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12,
        "mutationCount": 1
    }
}
cbq> SELECT count(*) FROM etudiant WHERE META().id = "etudiant1";
{
    "requestID": "4931f664-6b87-4eaa-9f3e-c95bc8b1fe5a",
    "signature": {
        "$1": "number"
    },
    "results": [
    {
        "$1": 0
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "2.746325ms",
        "executionTime": "2.645034ms",
        "resultCount": 1,
        "resultSize": 23,
        "serviceLoad": 12
    }
}

Puis, relancer la sauvegarde de référentiel etudiant_bkp.

# cbbackupmgr backup -c 172.18.56.11 -u admin -p admin123 -a /opt/couchbase/var/backup -r etudiant_bkp
Backing up to '2023-01-08T00_10_25.078534263Z'
Copied all data in 2.555s (Avg. 81.50KiB/Sec)                                                                                                             2 items / 163.00KiB
[===================================================================================================================================================================] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 81.50KiB          | Sun, 08 Jan 2023 00:10:25 +0000/s | Sun, 08 Jan 2023 00:10:27 +0000 | 2.602s   |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 163.00KiB   | 163.00KiB/s       | Sun, 08 Jan 2023 00:10:26 +0000 | Sun, 08 Jan 2023 00:10:27 +0000 | 1.123s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 1        | 0       | 0       | 1        | 0       | 0       | 0        | 0       | 0       |
Backup completed successfully

La encore, le type de sauvegarde est marqué INCR.

# cbbackupmgr info -a /opt/couchbase/var/backup -r etudiant_bkp
Name         | Size    | # Backups |
etudiant_bkp | 6.36MiB | 2         |
+  Backup                         | Size      | Type | Source       | Cluster UUID                     | Range | Events | Aliases | Complete |
+  2023-01-07T23_20_33.500512276Z | 5.96MiB   | FULL | 172.18.56.11 | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |
+  2023-01-08T00_10_25.078534263Z | 413.03KiB | INCR | 172.18.56.11 | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |

Restaurer les données

Afin de restaurer une sauvegarde, il est nécessaire de l'identifier soit par son nom, soit par la date de début de la sauvegarde.

Essayons d'abord de restaurer la première sauvegarde de référentiel cluster, qui est identifiée par le nom 2023-01-07T23_13_24.657151359Z. Vous pouvez utiliser la commande 'cbbackupmgr info' pour récupérer le nom de la sauvegarde.

Premièrement, nous allons faire un état des lieux

cbq> SELECT count(*) FROM etudiant WHERE META().id = "etudiant26";
{
    "requestID": "47f694aa-22f7-47dd-9876-f337deb254a5",
    "signature": {
        "$1": "number"
    },
    "results": [
    {
        "$1": 1
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "1.500616ms",
        "executionTime": "1.434354ms",
        "resultCount": 1,
        "resultSize": 23,
        "serviceLoad": 12
    }
}

Ensuite, nous lançons la commande de restauration en utilisant le référentiel cluster.

# cbbackupmgr restore -a /opt/couchbase/var/backup -r cluster \
 -c http://172.18.56.11:8091 -u admin -p admin123 \
 --start 2023-01-07T23_13_24.657151359Z \
 --end 2023-01-07T23_13_24.657151359Z --force-updates> > > 
Restoring backup '2023-01-07T23_13_24.657151359Z'
Copied all data in 1.678s (Avg. 162.37KiB/Sec)                                                                                                            55 items / 162.37KiB
[================================================================================================================================================================== ] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 162.37KiB         | Sun, 08 Jan 2023 00:28:14 +0000/s | Sun, 08 Jan 2023 00:28:16 +0000 | 1.705s   |
| Bucket
| ------
| Name               | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| N1QL_SYSTEM_BUCKET | Succeeded | 62.29KiB    | 62.29KiB/s        | Sun, 08 Jan 2023 00:28:15 +0000 | Sun, 08 Jan 2023 00:28:15 +0000 | 208ms    |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 0        | 0       | 0       | 16       | 0       | 0       | 0        | 0       | 0       |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 100.07KiB   | 100.07KiB/s       | Sun, 08 Jan 2023 00:28:15 +0000 | Sun, 08 Jan 2023 00:28:16 +0000 | 696ms    |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 33       | 0       | 0       | 6        | 0       | 0       | 0        | 0       | 0       |
Restore completed successfully

Enfin, faisons une vérification de ce qu'a été restauré.

# cbq -u admin -p admin123 -engine=http://127.0.0.1:8091/
 Connected to : http://127.0.0.1:8091/. Type Ctrl-D or \QUIT to exit.
 Path to history file for the shell : /root/.cbq_history 
cbq> \SET -query_context default:`ecole-bucket`.`ecole-scope`;
cbq> SELECT count(*) FROM etudiant WHERE META().id = "etudiant26";
{
    "requestID": "7db33bd3-6442-48d5-8519-04a05d3acbe9",
    "signature": {
        "$1": "number"
    },
    "results": [
    {
        "$1": 0
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "1.649018ms",
        "executionTime": "1.584735ms",
        "resultCount": 1,
        "resultSize": 23,
        "serviceLoad": 12
    }
}

Nous constatons que le document dont l'identifiant est 'étudiant26' n'est plus présent, car il a été inséré après la sauvegarde 'FULL'. Couchbase a effectué une restauration 'point in time' au début de la sauvegarde 'FULL'.

Et si nous essayions de restaurer la collection 'etudiant' à partir de la sauvegarde incrémentale ?

Comme toujours, commençons pas l'état des lieux.

cbq> SELECT * FROM etudiant WHERE META().id in ["etudiant1", "etudiant26"];
{
    "requestID": "6b97d67e-4a3c-42b4-b606-8d5d1adf2c90",
    "signature": {
        "*": "*"
    },
    "results": [
    {
        "etudiant": {
            "classe": [
                "Informatique",
                "Math"
            ],
            "email": "rachid.benhocine@example.com",
            "nom": "Benhocine",
            "prenom": "Rachid",
            "region": "Île-de-France",
            "ville": "Paris"
        }
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "81.848379ms",
        "executionTime": "81.728065ms",
        "resultCount": 1,
        "resultSize": 319,
        "serviceLoad": 12
    }
}

Ensuite, restaurer la sauvegarde incrémentale de etudiant_bkp

# cbbackupmgr restore -a /opt/couchbase/var/backup -r etudiant_bkp \
 -c http://172.18.56.11:8091 -u admin -p admin123 \
 --start 2023-01-08T00_10_25.078534263Z \
 --end 2023-01-08T00_10_25.078534263Z --force-updates> > > 
Restoring backup '2023-01-08T00_10_25.078534263Z'
Copied all data in 344ms (Avg. 92.34KiB/Sec)                                                                                                              2 items / 92.34KiB
[====================================================================================================================================================================] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 92.34KiB          | Sun, 08 Jan 2023 00:46:37 +0000/s | Sun, 08 Jan 2023 00:46:37 +0000 | 354ms    |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 92.34KiB    | 92.34KiB/s        | Sun, 08 Jan 2023 00:46:37 +0000 | Sun, 08 Jan 2023 00:46:37 +0000 | 53ms     |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 1        | 0       | 0       | 1        | 0       | 0       | 0        | 0       | 0       |
Restore completed successfully

Comme précédemment, Couchbase a effectué une restauration 'point in time' de la collection 'étudiant'.

cbq> SELECT * FROM etudiant WHERE META().id in ["etudiant1", "etudiant26"];
{
    "requestID": "2988907d-caa2-4e21-872a-08fc49ce7645",
    "signature": {
        "*": "*"
    },
    "results": [
    {
        "etudiant": {
            "classe": [
                "Informatique"
            ],
            "email": "emmanuel.macron@example.com",
            "nom": "Macron",
            "prenom": "Emmanuel",
            "region": "Île-de-France",
            "ville": "Paris"
        }
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "3.957408ms",
        "executionTime": "3.876229ms",
        "resultCount": 1,
        "resultSize": 293,
        "serviceLoad": 12
    }
}

Restaurer des documents spécifiques

Hé oui, couchbase est capable aussi de restaurer des documents spécifiques comme le fait Oracle avec Flashback Query (restauration logique!).

Commençons par supprimer deux lignes correspondant aux étudiants Martin et Masson.

cbq> SELECT nom FROM etudiant WHERE META().id in ["etudiant2", "etudiant3"];
{
    "requestID": "526ce561-5b91-485e-84c0-c69b823f4a90",
    "signature": {
        "nom": "json"
    },
    "results": [
    {
        "nom": "Martin"
    },
    {
        "nom": "Masson"
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "19.966332ms",
        "executionTime": "19.581407ms",
        "resultCount": 2,
        "resultSize": 62,
        "serviceLoad": 12
    }
}
cbq> DELETE FROM etudiant WHERE META().id in ["etudiant2", "etudiant3"];
{
    "requestID": "222ec021-f91a-4d7b-86e3-dce0f5ef6402",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "55.918053ms",
        "executionTime": "55.838211ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12,
        "mutationCount": 2
    }
}

En utilisant la sauvegarde 'FULL' de 'etudiant_bkp', nous pouvons restaurer les deux documents correspondant aux identifiants 'étudiant2' et 'étudiant3' en utilisant l'option '--filter-values'. Dans ce cas, nous avons demandé de restaurer uniquement le document 'étudiant2' en utilisant l'expression régulière ci-dessous.

# cbbackupmgr restore -a /opt/couchbase/var/backup -r etudiant_bkp \
-c http://172.18.56.11:8091 -u admin -p admin123 \
--start 2023-01-07T23_20_33.500512276Z \
--filter-values '{.*"nom":"Martin".*}' \
--end 2023-01-07T23_20_33.500512276Z --force-updates> > > > 
Restoring backup '2023-01-07T23_20_33.500512276Z'
Copied all data in 443ms (Avg. 93.87KiB/Sec)                                                                                                                 7 items / 93.87KiB
[=====================================================================================================================================================================] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 93.87KiB          | Sun, 08 Jan 2023 01:19:20 +0000/s | Sun, 08 Jan 2023 01:19:20 +0000 | 471ms    |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 93.87KiB    | 93.87KiB/s        | Sun, 08 Jan 2023 01:19:20 +0000 | Sun, 08 Jan 2023 01:19:20 +0000 | 108ms    |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 1        | 0       | 0       | 6        | 0       | 0       | 0        | 0       | 0       |
Restore completed successfully

On constate bien que le document 'etudiant2' ayant le nom 'Martin' a été réstauré mais pas l'autre document.

cbq> SELECT nom FROM etudiant WHERE META().id in ["etudiant2", "etudiant3"];
{
    "requestID": "eb50deb4-79d8-4576-80af-263c822efb18",
    "signature": {
        "nom": "json"
    },
    "results": [
    {
        "nom": "Martin"
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "8.95019ms",
        "executionTime": "8.832857ms",
        "resultCount": 1,
        "resultSize": 31,
        "serviceLoad": 12
    }
}

Backup Merge

La fusion de sauvegardes (ou 'backup merging') permet de regrouper plusieurs sauvegardes incrémentales en une seule sauvegarde incrémentale, voire même de les fusionner avec la sauvegarde 'FULL' afin d'avoir une sauvegarde complète. Cela permet à la fois de réduire l'espace disque occupé par toutes les sauvegardes intermédiaires incrémentales et d'accélérer la restauration.

Dans cet exemple, nous avons une sauvegarde FULL et une autre Incrémentale.

# cbbackupmgr info -a /opt/couchbase/var/backup -r cluster
Name    | Size    | # Backups |
cluster | 9.82MiB | 2         |
+  Backup                         | Size      | Type | Source       | Cluster UUID                     | Range | Events | Aliases | Complete |
+  2023-01-07T23_13_24.657151359Z | 9.60MiB   | FULL | 127.0.0.1    | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |
+  2023-01-07T23_40_35.189343515Z | 221.36KiB | INCR | 172.18.56.11 | d04090317d82b854c1d9610b70a36786 | N/A   | 0      | 0       | true     |

Pour fusionner la sauvegarde incrémentale dans la sauvegarde 'FULL', utilisez la commande ci-dessous. Notez que l'option '--start' permet de spécifier la sauvegarde la plus ancienne, et que l'option '--end' permet de spécifier la dernière sauvegarde.

# cbbackupmgr merge -a /opt/couchbase/var/backup -r cluster \
--start 2023-01-07T23_13_24.657151359Z \
--end 2023-01-07T23_40_35.189343515Z> > 
(1/2) Merging backup '2023-01-07T23_13_24.657151359Z'
Copied all data in 12.206s (Avg. 13.53KiB/Sec)                                                                                                           55 items / 162.37KiB
[=================================================================================================================================================================== ] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 13.53KiB          | Sun, 08 Jan 2023 01:29:27 +0000/s | Sun, 08 Jan 2023 01:29:40 +0000 | 12.204s  |
| Bucket
| ------
| Name               | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| N1QL_SYSTEM_BUCKET | Succeeded | 62.29KiB    | 12.46KiB/s        | Sun, 08 Jan 2023 01:29:28 +0000 | Sun, 08 Jan 2023 01:29:33 +0000 | 5.665s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 0        | 0       | 0       | 16       | 0       | 0       | 0        | 0       | 0       |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 100.07KiB   | 16.68KiB/s        | Sun, 08 Jan 2023 01:29:33 +0000 | Sun, 08 Jan 2023 01:29:40 +0000 | 6.104s   |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 33       | 0       | 0       | 6        | 0       | 0       | 0        | 0       | 0       |
(2/2) Merging backup '2023-01-07T23_40_35.189343515Z'
Copied all data in 1m15s (Avg. 2.03KiB/Sec)                                                                                                               1 items / 152.24KiB
[================================================================================================================================================================== ] 100.00%
| Transfer
| --------
| Status    | Avg Transfer Rate | Started At                        | Finished At                     | Duration |
| Succeeded | 2.42KiB           | Sun, 08 Jan 2023 01:29:40 +0000/s | Sun, 08 Jan 2023 01:30:43 +0000 | 1m3s     |
| Bucket
| ------
| Name         | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| ecole-bucket | Succeeded | 92.24KiB    | 2.00KiB/s         | Sun, 08 Jan 2023 01:29:40 +0000 | Sun, 08 Jan 2023 01:30:26 +0000 | 46.486s  |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 1        | 0       | 0       | 0        | 0       | 0       | 0        | 0       | 0       |
| Bucket
| ------
| Name               | Status    | Transferred | Avg Transfer Rate | Started At                      | Finished At                     | Duration |
| N1QL_SYSTEM_BUCKET | Succeeded | 60.00KiB    | 3.75KiB/s         | Sun, 08 Jan 2023 01:30:27 +0000 | Sun, 08 Jan 2023 01:30:43 +0000 | 16.456s  |
|
| Mutations                    | Deletions                    | Expirations                  |
| ---------                    | ---------                    | -----------                  |
| Received | Errored | Skipped | Received | Errored | Skipped | Received | Errored | Skipped |
| 0        | 0       | 0       | 0        | 0       | 0       | 0        | 0       | 0       |
Merge completed successfully

En utilisant la commande 'cbbackupmgr info', nous constatons qu'il ne reste plus que la sauvegarde 'FULL' de type 'MERGE - FULL', ce qui signifie que cette sauvegarde est le résultat d'une fusion.

# cbbackupmgr info -a /opt/couchbase/var/backup -r cluster
Name    | Size      | # Backups |
cluster | 392.03MiB | 1         |
+  Backup                         | Size      | Type         | Source | Cluster UUID                     | Range                                         | Events | Aliases | Complete |
+  2023-01-07T23_40_35.189343515Z | 392.03MiB | MERGE - FULL | Merge  | d04090317d82b854c1d9610b70a36786 | 2023-01-07T23_13_24 - 2023-01-07T23_40_35 - 2 | 0      | 0       | true     |

Supprimer une référentiel de sauvegarde

La commande ci-dessous permet de supprimer le référentiel de la sauvegarde. L'option '--repo' pour spécifier le repo à supprimer.

# cbbackupmgr remove -a /opt/couchbase/var/backup -r cluster
Backup repository `cluster` deleted successfully from archive `/opt/couchbase/var/backup`