Jednoduchý backup MySQL databáz

Tento skriptík používam už dosť dlho v rôznych podobách na jednoduché zálohovanie MySQL databázy/databáz do určeného adresára vo forme /server/rok/mesiac/deň/databáza/tabuľka.sql.

#!/bin/bash

SERVERS="localhost server1.example.com"
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
BACKUP_USER="backup"
BACKUP_PASSWORD="b3k4p"
BACKUP_PATH="/mnt/storage/database-backup/"

for SERVER in $SERVERS
do
	echo Backing up host ${SERVER}
	DATABASES=`mysql -N -B -h $SERVER -u $BACKUP_USER -p${BACKUP_PASSWORD} \
	-e "SHOW DATABASES;"`
	for DATABASE in $DATABASES
	do
		CURRENT_PATH=${BACKUP_PATH}/${SERVER}/${YEAR}/${MONTH}/${DAY}/${DATABASE}/
		mkdir -p $CURRENT_PATH

		TABLES=`mysql -N -B -h $SERVER -u $BACKUP_USER -p${BACKUP_PASSWORD} \
		$DATABASE -e "SHOW TABLES;"`
		for TABLE in $TABLES
		do
			mysqldump -h $SERVER -u $BACKUP_USER -p${BACKUP_PASSWORD} \
			$DATABASE $TABLE > ${CURRENT_PATH}/${TABLE}.sql
		done
	done
done

Kód je viac-menej samovysvetľujúci, ale pre ozrejmenie:

  • SERVERS – adresy serverov, ktoré chceme zálohovať
  • BACKUP_USER – login usera, ktorého používame na backupovanie (môžete aj root, ja používam dedikovaného používateľa s právami obmedzenými len na zálohovanie)
  • BACKUP_PASSWORD – pochopiteľne heslo usera 🙂
  • BACKUP_PATH – adresár, kde budú uložené zálohy

Už z prvého pohľadu vyplýva, že skript má niekoľko nevýhod:

  1. Pre každú činnosť (zoznam databáz, zoznam tabuliek, zálohovanie tabuľky) sa vytvorí samostatná konekcia na MySQL server. Teda ak máme 10 serverov po 10 databáz s 10 tabuľkami, môže skript spôsobovať problémy s výkonom servera.
  2. Heslo je uložené v plaintexte a tým pádom viditeľné aj v samotnom skripte, aj vo výpise procesov. Elegantnejšie by bolo použiť heslo v my.cnf uložené v domovskom adresári užívateľa, pod ktorým zálohy vykonávame
  3. Skript dodžiava hardcoded schému a nepoužíva kompresiu dumpov, prípade nejakú rotáciu.

Aj napriek týmto neduhom to však postačí na základné zálohovanie databáz. Dúfam, že tento skript pomôže niektorým začínajúcim adminom, pri znovuvynachádzaní kolesa 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *