Come fare il backup di Mysql all'interno di Docker

Aug 16, 2020

Lo leggi in 2 minuti

Fare il backup del nostro database è importantissimo, ma come farlo se Mysql gira dentro una macchina virtuale Docker?

Come fare il backup di Mysql all'interno di Docker


Usando Docker non è possibile lanciare il solito comando “mysqldump” dal terminale di Linux o dalla shell di Windows

Vediamo come aggirare questo fastidioso problema per ottenere comunque le nostre copie del database di Mysql.



Andiamo per ordine:

Supponiamo che tu abbia creato una istanza di Mysql usando un comando Docker simile a questo:

docker run –name=mysql01 -d mysql/mysql-server:latest

Con questo breve comando hai creato il tuo server Mysql aggiornato alla ultima versione, protetto dagli upgrade che farai sul tuo Pc Linux/Windows e configurato dai creatori di Mysql con i migliori settaggi che potresti mai sognare.

Un altro vantaggio di questo approccio è che puoi lanciare altre versioni di Mysql senza conflitti e senza problemi di tra di loro. Pensa a quante volte ti sei trovato a installare programmi che ti richiedevano vecchie versioni di Mysql: con Docker puoi tenere in linea 2 o più versioni, senza Docker solo quella installata sul sistema operativo.

I vantaggi sono molti, ma il vero problema con Docker risiede piuttosto nel fare le copie.

In teoria basterebbe lanciare un comando del tipo:

mysqldump –all-databases -uroot -p > copie.sql

e inserire la password, ma esistono 2 problemi:

  1. Il programma Mysql di cui stai facendo le copie NON E’        lo stesso che viene eseguito dentro Docker ma quello        installato sul sistema operativo principale!
  2. La password di root è diversa.

Per sistemare le cose intanto pensa a trovare la password giusta, e per fare questo dai il comando:

docker logs mysql01

Annota la password che appare sul file di log, poi crea un piccolo file script scrivendo su Linux:

vi backup_mysql

oppure

nano backup_mysql

oppure ancora (su Windows)

edit backup_mysql


copia all’interno del file appena creato lo script sottostante:

MYSQL_ROOT_PASSWORD = password_fornita_dal_log
FILE=./mysql_dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
CONTAINER="$( docker ps | grep mysql | awk 'NR==1{print $1}')"
docker exec "${CONTAINER}" sh -c 'exec mysqldump --all-databases \\
-uroot -p"$MYSQL_ROOT_PASSWORD"' > $FILE 

assegna a MYSQL_ROOT_PASSWORD la password che hai annotato poco prima, salva il file e scrivi:

sh  ./backup_mysql

e avrai in pochi secondi le tue belle copie di sicurezza con data e ora di creazione, da salvare su Drive, Dropbox o su Amazon S3!



Iscriviti ora alla nostra newsletter e dopo avere confermato la tua iscrizione troverai ogni 15 gg nella tua mail un argomento o un progetto pratico da seguire, con la lista dei componenti e il software necessario.

newsletter