Skip to content

Commit

Permalink
Fix percona-xtradb backup & restore (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
hossainemruz authored and tamalsaha committed Oct 31, 2019
1 parent 06cbe89 commit aafee30
Show file tree
Hide file tree
Showing 11 changed files with 187 additions and 10 deletions.
2 changes: 1 addition & 1 deletion chart/stash-percona-xtradb/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
replicaCount: 1
# we are declaring these values as global so that parent chart can overwrite them
docker:
registry: appscode
registry: stashed
image: stash-percona-xtradb
tag: 5.7

Expand Down
10 changes: 10 additions & 0 deletions docs/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
title: Percona XtraDB {{ .subproject_version }} Backup Guides | Stash
menu:
product_stash_{{ .version }}:
identifier: stash-percona-xtradb-guides-{{ .subproject_version }}
name: {{ .subproject_version }}
parent: stash-percona-xtradb-guides
weight: 10
menu_name: product_stash_{{ .version }}
---
63 changes: 63 additions & 0 deletions docs/clustered.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
title: Backup & Restore Clustered Percona XtraDB Database | Stash
description: Backup Clustered Percona XtraDB Database database using Stash
menu:
product_stash_{{ .version }}:
identifier: percona-xtradb-clustered-guide-{{ .subproject_version }}
name: Backup & Restore Clustered Percona XtraDB
parent: stash-percona-xtradb-guides-{{ .subproject_version }}
weight: 10
product_name: stash
menu_name: product_stash_{{ .version }}
section_menu_id: stash-addons
---

**Deploy Database:**

```bash
$ kubectl apply -f ./docs/examples/clustered/backup/sample-xtradb-cluster.yaml
perconaxtradb.kubedb.com/sample-xtradb-cluster created
```

**Create Secret:**
```bash
$ kubectl create secret generic -n demo gcs-secret \
--from-file=./RESTIC_PASSWORD \
--from-file=./GOOGLE_PROJECT_ID \
--from-file=./GOOGLE_SERVICE_ACCOUNT_JSON_KEY
```

**Create Repository:**

```bash
$ kubectl apply -f ./docs/examples/clustered/backup/repository.yaml
repositories.stash.appscode.com/gcs-repo-xtradb-cluster created
```

**Install Chart:**

```console
$ helm template chart/stash-percona-xtradb --name=percona-xtradb-5.7 --set docker.registry=appscodeci --set docker.tag=refactor_linux_amd64 | kubectl apply -f -
```

**Create BackupConfiguration:**

```bash
$ kubectl apply -f ./docs/examples/clustered/backup/backupconfiguration.yaml
backupconfiguration.stash.appscode.com/sample-xtradb-cluster-backup created
```

## Restore

**Create Restored Database:**

```bash
$ kubectl apply -f ./docs/examples/clustered/restore/restored-xtradb-cluster.yaml
perconaxtradb.kubedb.com/restored-xtradb-cluster created
```

**Create RestoreSession:**
```bash
$ kubectl apply -f ./docs/examples/clustered/restore/restoresession.yaml
restoresession.stash.appscode.com/restored-xtradb-cluster-restore created
```
20 changes: 20 additions & 0 deletions docs/examples/clustered/backup/backupconfiguration.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
apiVersion: stash.appscode.com/v1beta1
kind: BackupConfiguration
metadata:
name: sample-xtradb-cluster-backup
namespace: demo
spec:
schedule: "*/5 * * * *"
task:
name: percona-xtradb-backup-5.7
repository:
name: gcs-repo-xtradb-cluster
target:
ref:
apiVersion: appcatalog.appscode.com/v1alpha1
kind: AppBinding
name: sample-xtradb-cluster
retentionPolicy:
name: keep-last-5
keepLast: 5
prune: true
11 changes: 11 additions & 0 deletions docs/examples/clustered/backup/repository.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: stash.appscode.com/v1alpha1
kind: Repository
metadata:
name: gcs-repo-xtradb-cluster
namespace: demo
spec:
backend:
gcs:
bucket: appscode-qa
prefix: /demo/xtradb/sample-xtradb-cluster
storageSecretName: gcs-secret
17 changes: 17 additions & 0 deletions docs/examples/clustered/backup/sample-xtradb-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: kubedb.com/v1alpha1
kind: PerconaXtraDB
metadata:
name: sample-xtradb-cluster
namespace: demo
spec:
version: "5.7"
replicas: 3
storageType: Durable
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
terminationPolicy: WipeOut
22 changes: 22 additions & 0 deletions docs/examples/clustered/restore/restored-xtradb-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: kubedb.com/v1alpha1
kind: PerconaXtraDB
metadata:
name: restored-xtradb-cluster
namespace: demo
spec:
version: "5.7"
replicas: 3
databaseSecret:
secretName: sample-xtradb-cluster-auth
storageType: Durable
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
init:
stashRestoreSession:
name: restored-xtradb-cluster-restore
terminationPolicy: WipeOut
34 changes: 34 additions & 0 deletions docs/examples/clustered/restore/restoresession.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
apiVersion: stash.appscode.com/v1beta1
kind: RestoreSession
metadata:
name: restored-xtradb-cluster-restore
namespace: demo
labels:
kubedb.com/kind: PerconaXtraDB # this label is mandatory if you are using KubeDB to deploy the database.
spec:
task:
name: percona-xtradb-restore-5.7
repository:
name: gcs-repo-xtradb-cluster
target:
replicas: 3
ref:
apiVersion: appcatalog.appscode.com/v1alpha1
kind: AppBinding
name: restored-xtradb-cluster
volumeMounts:
- name: data-restored-xtradb-cluster
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: data-restored-xtradb-cluster-${POD_ORDINAL}
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
rules:
- targetHosts: [] # empty host match all hosts
sourceHost: "host-0" # restore same data on all pvc
snapshots: ["latest"]
7 changes: 4 additions & 3 deletions pkg/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"path/filepath"
"strings"

api_v1beta1 "stash.appscode.dev/stash/apis/stash/v1beta1"
"stash.appscode.dev/stash/pkg/restic"
Expand Down Expand Up @@ -75,7 +76,7 @@ func NewCmdBackup() *cobra.Command {
},
}

cmd.Flags().StringVar(&opt.dumpArgs, "xtradb-args", defaultDumpArgs, "Additional arguments")
cmd.Flags().StringVar(&opt.xtradbArgs, "xtradb-args", defaultDumpArgs, "Additional arguments")
cmd.Flags().Int32Var(&opt.socatRetry, "socat-retry", kubedbconfig_api.SOCATOptionRetry, "Additional arguments")

cmd.Flags().StringVar(&masterURL, "master", masterURL, "The address of the Kubernetes API server (overrides any value in kubeconfig)")
Expand Down Expand Up @@ -159,8 +160,8 @@ func (opt *perconaOptions) backupPerconaXtraDB() (*restic.BackupOutput, error) {
"-h", appBinding.Spec.ClientConfig.Service.Name,
},
}
if opt.dumpArgs != "" {
opt.backupOptions.StdinPipeCommand.Args = append(opt.backupOptions.StdinPipeCommand.Args, opt.dumpArgs)
for _, arg := range strings.Fields(opt.xtradbArgs) {
opt.backupOptions.StdinPipeCommand.Args = append(opt.backupOptions.StdinPipeCommand.Args, arg)
}
} else { // clustered database
opt.backupOptions.StdinFileName = xtraBackupStreamFile
Expand Down
8 changes: 4 additions & 4 deletions pkg/restore.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package pkg

import (
"path/filepath"
"strings"

api_v1beta1 "stash.appscode.dev/stash/apis/stash/v1beta1"
"stash.appscode.dev/stash/pkg/restic"
Expand Down Expand Up @@ -73,7 +74,7 @@ func NewCmdRestore() *cobra.Command {
},
}

cmd.Flags().StringVar(&opt.mysqlArgs, "xtradb-args", opt.mysqlArgs, "Additional arguments")
cmd.Flags().StringVar(&opt.xtradbArgs, "xtradb-args", opt.xtradbArgs, "Additional arguments")
cmd.Flags().Int32Var(&opt.targetAppReplicas, "target-app-replicas", opt.targetAppReplicas, "Additional arguments")

cmd.Flags().StringVar(&masterURL, "master", masterURL, "The address of the Kubernetes API server (overrides any value in kubeconfig)")
Expand Down Expand Up @@ -144,10 +145,9 @@ func (opt *perconaOptions) restorePerconaXtraDB() (*restic.RestoreOutput, error)
"-h", appBinding.Spec.ClientConfig.Service.Name,
},
}
if opt.mysqlArgs != "" {
opt.dumpOptions.StdoutPipeCommand.Args = append(opt.dumpOptions.StdoutPipeCommand.Args, opt.mysqlArgs)
for _, arg := range strings.Fields(opt.xtradbArgs) {
opt.dumpOptions.StdoutPipeCommand.Args = append(opt.dumpOptions.StdoutPipeCommand.Args, arg)
}

// wait for DB ready
waitForDBReady(appBinding.Spec.ClientConfig.Service.Name, appBinding.Spec.ClientConfig.Service.Port)
} else {
Expand Down
3 changes: 1 addition & 2 deletions pkg/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ type perconaOptions struct {
namespace string
appBindingName string
outputDir string
dumpArgs string
mysqlArgs string
xtradbArgs string
garbdCnf kubedbconfig_api.GaleraArbitratorConfiguration
socatRetry int32
targetAppReplicas int32
Expand Down

0 comments on commit aafee30

Please sign in to comment.