How to restore a local backup

This is a guide for performing a basic restore (restoring a locally made backup).

To restore a backup that was made from the a different cluster, (i.e. cluster migration via restore), see How to migrate a cluster.

Prerequisites


List backups

To view the available backups to restore you can enter the command list-backups:

juju run mysql/leader list-backups
juju run mysql-k8s/leader list-backups

Juju 2.9 users

Remember that juju run <action name> becomes juju run-action <action name> --wait.

See also: Breaking changes between Juju 2.9 and 3

This should show your available backups

backups: |-
  backup-id             | backup-type  | backup-status
  ----------------------------------------------------
  YYYY-MM-DDTHH:MM:SSZ  | physical     | finished

Restore a backup

To restore a backup from that list, run the restore command and pass the backup-id to restore:

juju run mysql/leader restore backup-id=YYYY-MM-DDTHH:MM:SSZ
juju run mysql-k8s/leader restore backup-id=YYYY-MM-DDTHH:MM:SSZ

Your restore will then be in progress.

Point-in-time recovery

Point-in-time recovery (PITR) is a MySQL feature that enables restorations to the database state at specific points in time. The feature is enabled by default when there’s a working relation with S3 storage.

To restore to a specific point in time between different backups (e.g. to restore only specific transactions made between those backups), use the restore-to-time parameter to pass a timestamp:

juju run mysql/leader restore restore-to-time="YYYY-MM-DD HH:MM:SS"
juju run mysql-k8s/leader restore restore-to-time="YYYY-MM-DD HH:MM:SS"

Your restore will then be in progress.

It’s also possible to restore to the latest point from a specific timeline by passing the ID of a backup taken on that timeline and restore-to-time=latest when requesting a restore:

juju run mysql/leader restore restore-to-time=latest
juju run mysql-k8s/leader restore restore-to-time=latest