Petit backup

Histoire d’avoir ceintures et bretelles j’ai codé ce petit script bash qui sauvegarde la ou les bases de données (format MySQL) :

#!/bin/bash

# MariaDB databases backup

# Settings
arch='/mnt/backup/db'

# Functions
function backup_and_clean() {

	if [[ -z $1 ]]; then
		echo "Parameter missing!"
		exit 1
	fi

	if [[ $1 == '*' ]]; then
		archive='full-backup'
		db='--all-databases'
	else
		archive="$1-backup"
		db=$1
		if [[ ! -d /var/lib/mysql/$db ]]; then
			echo "$1 database does not exists!"
			exit 1
		fi
	fi

	echo "Backup $1 to $archive..."

	# Backup
	/usr/bin/mysqldump --defaults-extra-file=/home/me/.mylogin.cnf -u me --single-transaction --quick --lock-tables=false $db | gzip -c > $arch/$archive-$(date +"%F").sql.gz

	# Cleanup: remove older archives (keep 5 newests)
	if ls $arch/$archive-* 1> /dev/null 2>&1; then
		cleanup=$(/usr/bin/ls -t $arch/$archive-* | awk 'NR>5')
		if [[ $? != 0 ]]; then
			echo "No $archive found"
		elif [[ $cleanup ]]; then
			/bin/rm $cleanup
		else
			echo "No $archive cleanup to do"
		fi
	else
		echo "No $archive found"
	fi
}

# Backup all databases daily
backup_and_clean '*'

# Backup my_db daily
backup_and_clean 'my_db'

Ça compresse et ne garde que les 5 dernières archives, le tout lancé tous les jours (cron.daily).

Histoire de l’avoir sous le coude si un jour j’en ai besoin…

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/14817

Haut de page