Backup MySql con Sidecar docker
Questa volta vi propongo un piccolo progetto di utility che vi aiuta a gestire i backup dei vostri deploy su docker/kubernetes di mysql.
> Articolo d'archivio del 2018, dal vecchio nutellino.it: comandi e versioni potrebbero non essere più attuali.

Ciao a tutti!
Questa volta vi propongo un piccolo progetto di utility che vi aiuta a gestire i backup dei vostri deploy su docker/kubernetes di mysql.
Ho realizzato questo piccolo container (trovate il progetto qui: https://github.com/nutellinoit/sidecar-backup-mysql) per fare in modo che siano i deploy a gestire i propri backup, e non un sysadmin che debba andare a creare ogni backup manualmente.
Ecco il docker-compose.yml per il deploy:
version: '2'
services:
sidecar-backup-mysql:
image: nutellinoit/sidecar-backup-mysql:1.0
volumes:
- ./dumpdb:/go/src/app/dumpdb
restart: always
environment:
- MYSQL_HOST=db
- MYSQL_DATABASE=wordpress
- MYSQL_USER=root
- MYSQL_PASSWORD=123456
- MYSQL_SQL_FILENAME=nomebackup
- SCHEDULE=0 * * * * *
# Database per test
db:
image: mysql:latest
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: 123456Tutto è gestito da alcune variabili d'ambiente che vi descrivo di seguito:
- MYSQL_HOST : L'hostname della macchina dove collegarsi e fare il backup
- MYSQL_DATABASE : Il nome del database mysql da salvare
- MYSQL_USER : L'username mysql di connessione
- MYSQL_PASSWORD : La password dell'utente mysql
- MYSQLSQLFILENAME : Il nome del file del backup (verrà poi aggiunto a questo nome il suffisso
$_now.sqldove$_nowè un formato data costruito così:"%s_%m_%d_%Y") - SCHEDULE : è la temporizzazione dell'esecuzione del backup. Di seguito la tabella con la spiegazione di ogni posizione
| Field name | Mandatory? | Allowed values | Allowed special characters |
|---|---|---|---|
| Seconds | Yes | 0-59 | * / , - |
| Minutes | Yes | 0-59 | * / , - |
| Hours | Yes | 0-23 | * / , - |
| Day of month | Yes | 1-31 | * / , - ? |
| Month | Yes | 1-12 or JAN-DEC | * / , - |
| Day of week | Yes | 0-6 or SUN-SAT | * / , - ? |
Dove viene salvato il backup?
La cartella di salvataggio è definita nella direttiva dei volumi
volumes:
- ./dumpdb:/go/src/app/dumpdbIn questo caso viene mappata la cartella dell'host dumpdb all'interno della directory dove è presente il docker-compose.yml. In questa cartella verranno salvati tutti i backup mysql che il container creerà secondo lo scheduling impostato.
Kubernetes yaml
Ed ecco anche un piccolo riferimento per il deploy di questo container all'interno di kubernetes:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.7.0 ()
creationTimestamp: null
labels:
io.kompose.service: sidecar-backup-mysql
name: sidecar-backup-mysql
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: sidecar-backup-mysql
spec:
containers:
- env:
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_HOST
value: db
- name: MYSQL_PASSWORD
value: "123456"
- name: MYSQL_SQL_FILENAME
value: nomebackup
- name: MYSQL_USER
value: root
- name: SCHEDULE
value: 0 * * * * *
image: nutellinoit/sidecar-backup-mysql:1.0
name: sidecar-backup-mysql
resources: {}
volumeMounts:
- mountPath: /go/src/app/dumpdb
name: sidecar-backup-mysql-claim0
restartPolicy: Always
volumes:
- name: sidecar-backup-mysql-claim0
persistentVolumeClaim:
claimName: sidecar-backup-mysql-claim0
status: {}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: sidecar-backup-mysql-claim0
name: sidecar-backup-mysql-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1000Mi
status: {}I backup in questo caso verranno salvati all'interno del persistent volume claim, che sta a voi decidere a quale persistent volume collegare, o se collegarlo ad una Storage Classes in auto provision.
$ cat ~/archivio/backup-mysql-con-sidecar-docker.md
WARNING: questo file è del 2018.
L'ho scritto io, ma un io di qualche anno fa: potrebbe non rispecchiare più quello che penso né quello che so fare.
Continuare? [s/N]