Backup MySql con Sidecar docker

March 07, 2018 0 Comments Mysql, Docker, Backup, Golang, Kubernetes

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: 123456

Tutto è 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.sql dove $_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/dumpdb

In 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.

Samuele Chiocca
Padova, italy Website