Skip to content

Commit 70338b6

Browse files
authored
Merge pull request #60 from jkaninda/develop
Develop
2 parents 365ab8d + 33b1acf commit 70338b6

File tree

10 files changed

+151
-26
lines changed

10 files changed

+151
-26
lines changed

.github/workflows/build.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Build
2+
on:
3+
push:
4+
branches: ['develop']
5+
env:
6+
BUILDKIT_IMAGE: jkaninda/mysql-bkup
7+
jobs:
8+
docker:
9+
runs-on: ubuntu-latest
10+
steps:
11+
-
12+
name: Set up QEMU
13+
uses: docker/setup-qemu-action@v3
14+
-
15+
name: Set up Docker Buildx
16+
uses: docker/setup-buildx-action@v3
17+
-
18+
name: Login to DockerHub
19+
uses: docker/login-action@v3
20+
with:
21+
username: ${{ secrets.DOCKERHUB_USERNAME }}
22+
password: ${{ secrets.DOCKERHUB_TOKEN }}
23+
-
24+
name: Build and push
25+
uses: docker/build-push-action@v3
26+
with:
27+
push: true
28+
file: "./docker/Dockerfile"
29+
platforms: linux/amd64,linux/arm64,linux/arm/v7
30+
tags: |
31+
"${{env.BUILDKIT_IMAGE}}:develop-${{ github.sha }}"
32+

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ docker-run-scheduled: docker-build
2727

2828

2929
docker-run-scheduled-s3: docker-build
30-
docker run --rm --network web --user 1000:1000 --name mysql-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/mysql-bkup bkup backup --storage s3 --mode scheduled --path /custom-path --period "* * * * *"
30+
docker run --rm --network web --name mysql-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${BUCKET_NAME}" -e "S3_ENDPOINT=${AWS_S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/mysql-bkup bkup backup --storage s3 --mode scheduled --path /custom-path --period "* * * * *"
3131

3232
docker-run-s3: docker-build
3333
docker run --rm --network web --name mysql-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "AWS_S3_ENDPOINT=${AWS_S3_ENDPOINT}" -e "AWS_REGION=eu2" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/mysql-bkup bkup backup --storage s3 --path /custom-path
@@ -37,7 +37,7 @@ docker-restore-s3: docker-build
3737
docker run --rm --network web --name mysql-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "S3_ENDPOINT=${AWS_S3_ENDPOINT}" -e "AWS_REGION=eu2" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/mysql-bkup bkup restore --storage s3 -f ${FILE_NAME} --path /custom-path
3838

3939
docker-run-ssh: docker-build
40-
docker run --rm --network web -v "${SSH_IDENTIFY_FILE_LOCAL}:" --name mysql-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/mysql-bkup bkup backup --storage ssh
40+
docker run --rm --network web --name mysql-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/mysql-bkup bkup backup --storage ssh
4141

4242
docker-restore-ssh: docker-build
4343
docker run --rm --network web --name mysql-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" jkaninda/mysql-bkup bkup restore --storage ssh -f ${FILE_NAME}

docker/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ ENV AWS_S3_BUCKET_NAME=""
2121
ENV AWS_ACCESS_KEY=""
2222
ENV AWS_SECRET_KEY=""
2323
ENV AWS_REGION="us-west-2"
24+
ENV AWS_S3_PATH=""
2425
ENV AWS_DISABLE_SSL="false"
2526
ENV GPG_PASSPHRASE=""
2627
ENV SSH_USER=""

docs/how-tos/backup-to-ssh.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ services:
3232
environment:
3333
- DB_PORT=3306
3434
- DB_HOST=mysql
35-
- DB_NAME=database
35+
#- DB_NAME=database
3636
- DB_USERNAME=username
3737
- DB_PASSWORD=password
3838
## SSH config
@@ -69,7 +69,7 @@ services:
6969
command:
7070
- /bin/sh
7171
- -c
72-
- mysql-bkup backup -d database --storage s3 --mode scheduled --period "0 1 * * *"
72+
- mysql-bkup backup -d database --storage ssh --mode scheduled --period "0 1 * * *"
7373
volumes:
7474
- ./id_ed25519:/tmp/id_ed25519"
7575
environment:
@@ -117,7 +117,7 @@ spec:
117117
command:
118118
- /bin/sh
119119
- -c
120-
- mysql-bkup backup -s s3 --path /custom_path
120+
- mysql-bkup backup -s ssh
121121
env:
122122
- name: DB_PORT
123123
value: "3306"
@@ -141,6 +141,6 @@ spec:
141141
- name: AWS_ACCESS_KEY
142142
value: "xxxx"
143143
- name: SSH_IDENTIFY_FILE
144-
value: "/home/jkaninda/backups"
145-
restartPolicy: OnFailure
144+
value: "/tmp/id_ed25519"
145+
restartPolicy: Never
146146
```

docs/how-tos/restore-from-s3.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,54 @@ services:
4848
- web
4949
networks:
5050
web:
51+
```
52+
53+
## Restore on Kubernetes
54+
55+
56+
### Simple Kubernetes CronJob usage:
57+
58+
```yaml
59+
apiVersion: batch/v1
60+
kind: CronJob
61+
metadata:
62+
name: bkup-job
63+
spec:
64+
schedule: "0 1 * * *"
65+
jobTemplate:
66+
spec:
67+
template:
68+
spec:
69+
containers:
70+
- name: mysql-bkup
71+
image: jkaninda/mysql-bkup
72+
command:
73+
- /bin/sh
74+
- -c
75+
- mysql-bkup restore -s s3 --path /custom_path -f store_20231219_022941.sql.gz
76+
env:
77+
- name: DB_PORT
78+
value: "3306"
79+
- name: DB_HOST
80+
value: ""
81+
- name: DB_NAME
82+
value: ""
83+
- name: DB_USERNAME
84+
value: ""
85+
# Please use secret!
86+
- name: DB_PASSWORD
87+
value: ""
88+
- name: AWS_S3_ENDPOINT
89+
value: "https://s3.amazonaws.com"
90+
- name: AWS_S3_BUCKET_NAME
91+
value: "xxx"
92+
- name: AWS_REGION
93+
value: "us-west-2"
94+
- name: AWS_ACCESS_KEY
95+
value: "xxxx"
96+
- name: AWS_SECRET_KEY
97+
value: "xxxx"
98+
- name: AWS_DISABLE_SSL
99+
value: "false"
100+
restartPolicy: OnFailure
51101
```

docs/how-tos/restore-from-ssh.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,52 @@ services:
4747
- web
4848
networks:
4949
web:
50+
```
51+
## Restore on Kubernetes
52+
53+
Simple Kubernetes CronJob usage:
54+
55+
```yaml
56+
apiVersion: batch/v1
57+
kind: CronJob
58+
metadata:
59+
name: bkup-job
60+
spec:
61+
schedule: "0 1 * * *"
62+
jobTemplate:
63+
spec:
64+
template:
65+
spec:
66+
containers:
67+
- name: mysql-bkup
68+
image: jkaninda/mysql-bkup
69+
command:
70+
- /bin/sh
71+
- -c
72+
- mysql-bkup restore -s ssh -f store_20231219_022941.sql.gz
73+
env:
74+
- name: DB_PORT
75+
value: "3306"
76+
- name: DB_HOST
77+
value: ""
78+
- name: DB_NAME
79+
value: ""
80+
- name: DB_USERNAME
81+
value: ""
82+
# Please use secret!
83+
- name: DB_PASSWORD
84+
value: ""
85+
- name: SSH_HOST_NAME
86+
value: ""
87+
- name: SSH_PORT
88+
value: "22"
89+
- name: SSH_USER
90+
value: "xxx"
91+
- name: SSH_REMOTE_PATH
92+
value: "/home/jkaninda/backups"
93+
- name: AWS_ACCESS_KEY
94+
value: "xxxx"
95+
- name: SSH_IDENTIFY_FILE
96+
value: "/tmp/id_ed25519"
97+
restartPolicy: Never
5098
```

pkg/backup.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ func StartBackup(cmd *cobra.Command) {
2525
utils.GetEnv(cmd, "period", "SCHEDULE_PERIOD")
2626

2727
//Get flag value and set env
28-
s3Path := utils.GetEnv(cmd, "path", "AWS_S3_PATH")
2928
remotePath := utils.GetEnv(cmd, "path", "SSH_REMOTE_PATH")
3029
storage = utils.GetEnv(cmd, "storage", "STORAGE")
3130
file = utils.GetEnv(cmd, "file", "FILE_NAME")
@@ -35,6 +34,8 @@ func StartBackup(cmd *cobra.Command) {
3534
executionMode, _ = cmd.Flags().GetString("mode")
3635
dbName = os.Getenv("DB_NAME")
3736
gpqPassphrase := os.Getenv("GPG_PASSPHRASE")
37+
_ = utils.GetEnv(cmd, "path", "AWS_S3_PATH")
38+
3839
//
3940
if gpqPassphrase != "" {
4041
encryption = true
@@ -49,7 +50,7 @@ func StartBackup(cmd *cobra.Command) {
4950
if executionMode == "default" {
5051
switch storage {
5152
case "s3":
52-
s3Backup(backupFileName, s3Path, disableCompression, prune, backupRetention, encryption)
53+
s3Backup(backupFileName, disableCompression, prune, backupRetention, encryption)
5354
case "local":
5455
localBackup(backupFileName, disableCompression, prune, backupRetention, encryption)
5556
case "ssh", "remote":
@@ -61,22 +62,23 @@ func StartBackup(cmd *cobra.Command) {
6162
}
6263

6364
} else if executionMode == "scheduled" {
64-
scheduledMode()
65+
scheduledMode(storage)
6566
} else {
6667
utils.Fatal("Error, unknown execution mode!")
6768
}
6869

6970
}
7071

7172
// Run in scheduled mode
72-
func scheduledMode() {
73+
func scheduledMode(storage string) {
7374

7475
fmt.Println()
7576
fmt.Println("**********************************")
7677
fmt.Println(" Starting MySQL Bkup... ")
7778
fmt.Println("***********************************")
7879
utils.Info("Running in Scheduled mode")
7980
utils.Info("Execution period %s", os.Getenv("SCHEDULE_PERIOD"))
81+
utils.Info("Storage type %s ", storage)
8082

8183
//Test database connexion
8284
utils.TestDatabaseConnection()
@@ -203,8 +205,9 @@ func localBackup(backupFileName string, disableCompression bool, prune bool, bac
203205
}
204206
}
205207

206-
func s3Backup(backupFileName string, s3Path string, disableCompression bool, prune bool, backupRetention int, encrypt bool) {
208+
func s3Backup(backupFileName string, disableCompression bool, prune bool, backupRetention int, encrypt bool) {
207209
bucket := utils.GetEnvVariable("AWS_S3_BUCKET_NAME", "BUCKET_NAME")
210+
s3Path := utils.GetEnvVariable("AWS_S3_PATH", "S3_PATH")
208211
utils.Info("Backup database to s3 storage")
209212
//Backup database
210213
BackupDatabase(backupFileName, disableCompression)

pkg/scripts.go

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,10 @@ func CreateCrontabScript(disableCompression bool, storage string) {
2222
disableC = "--disable-compression"
2323
}
2424

25-
var scriptContent string
26-
27-
if storage == "s3" {
28-
scriptContent = fmt.Sprintf(`#!/usr/bin/env bash
29-
set -e
30-
bkup backup --dbname %s --port %s --storage s3 --path %s %v
31-
`, os.Getenv("DB_NAME"), os.Getenv("DB_PORT"), os.Getenv("S3_PATH"), disableC)
32-
} else {
33-
scriptContent = fmt.Sprintf(`#!/usr/bin/env bash
25+
scriptContent := fmt.Sprintf(`#!/usr/bin/env bash
3426
set -e
35-
bkup backup --dbname %s --port %s %v
36-
`, os.Getenv("DB_NAME"), os.Getenv("DB_PORT"), disableC)
37-
}
27+
bkup backup --dbname %s --port %s --storage %s %v
28+
`, os.Getenv("DB_NAME"), os.Getenv("DB_PORT"), storage, disableC)
3829

3930
if err := utils.WriteToFile(backupCronFile, scriptContent); err != nil {
4031
utils.Fatal("Error writing to %s: %v\n", backupCronFile, err)

utils/logger.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ func Done(msg string, args ...any) {
4343
}
4444
}
4545

46+
// Fatal logs an error message and exits the program
4647
func Fatal(msg string, args ...any) {
4748
// Fatal logs an error message and exits the program.
4849
formattedMessage := fmt.Sprintf(msg, args...)

utils/s3.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ func CreateSession() (*session.Session, error) {
4242

4343
err = CheckEnvVars(awsVars)
4444
if err != nil {
45-
Error(fmt.Sprintf("Error checking environment variables\n: %s", err))
46-
os.Exit(1)
45+
Fatal("Error checking environment variables\n: %s", err)
4746
}
4847
// S3 Config
4948
s3Config := &aws.Config{

0 commit comments

Comments
 (0)