Table des matières

Automysqlbackup ou la sauvegarde facile

Sous Debian, il existe un outil très complet permettant la maintenance des tables MySQL à chaud, il s'agit de automysqlbackup.

Cet outils permet de (voici une liste non exhaustive):

Installation

Pour l'installation, rien de plus simple, une seule ligne suffit :

aptitude install automysqlbackup

Configuration

Ici aussi, pas grand chose à faire par défaut, l'outils est prêt à l'emploi et fonctionne de manière autonome.

Nous allons tout de même faire un rapide tour de présentation du système de configuration pour vous permettre de bien comprendre son fonctionnement et de l'adapter à vos besoins propres.

Le fichier de configuration se trouve /etc/default/automysqlbackup . En voici un exemple ci-dessous :

# By default, the Debian version of automysqlbackup will use:
# mysqldump --defaults-file=/etc/mysql/debian.cnf
# but you might want to overwrite with a specific user & pass.
# To do this, simply edit bellow.
 
# Username to access the MySQL server e.g. dbuser
#USERNAME=`grep user /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`
 
# Username to access the MySQL server e.g. password
#PASSWORD=`grep password /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`
 
# Host name (or IP address) of MySQL server e.g localhost
DBHOST=localhost
 
# List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3"
# Note that it's absolutely normal that the db named "mysql" is not in this
# list, as it's added later by the script. See the MDBNAMES directives below
# in this file (advanced options).
# This is ONLY a convenient default, if you don't like it, don't complain
# and write your own.
# The following is a quick hack that will find the names of the databases by
# reading the mysql folder content. Feel free to replace by something else.
# DBNAMES=`find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ `
# This one does a list of dbs using a MySQL statement.
DBNAMES=`mysql --defaults-file=/etc/mysql/debian.cnf --execute="SHOW DATABASES" | awk '{print $1}' | grep -v ^Database$ | grep -v ^mysql$ | grep -v ^performance_schema$ | grep -v ^information_schema$ | tr \\\r\\\n ,\ `
 
# Backup directory location e.g /backups
# Folders inside this one will be created (daily, weekly, etc.), and the
# subfolders will be database names. Note that backups will be owned by
# root, with Unix rights 0600.
BACKUPDIR="/home/automysqlbackup"
 
# Mail setup
# What would you like to be mailed to you?
# - log   : send only log file
# - files : send log file and sql files as attachments (see docs)
# - stdout : will simply output the log to the screen if run manually.
# - quiet : Only send logs if an error occurs to the MAILADDR.
MAILCONTENT="quiet"
 
# Set the maximum allowed email size in k. (4000 = approx 5MB email [see
# docs])
MAXATTSIZE="4000"
 
# Email Address to send mail to? (user@domain.com)
MAILADDR="root"
 
# ============================================================
# === ADVANCED OPTIONS ( Read the doc's below for details )===
#=============================================================
 
# List of DBBNAMES for Monthly Backups.
MDBNAMES="mysql $DBNAMES"
 
# List of DBNAMES to EXLUCDE if DBNAMES are set to all (must be in " quotes)
DBEXCLUDE=""
 
# Include CREATE DATABASE in backup?
CREATE_DATABASE=yes
 
# Separate backup directory and file for each DB? (yes or no)
SEPDIR=yes
 
# Which day do you want weekly backups? (1 to 7 where 1 is Monday)
DOWEEKLY=6
 
# Choose Compression type. (gzip or bzip2)
COMP=gzip
 
# Compress communications between backup server and MySQL server?
COMMCOMP=no
 
# Additionally keep a copy of the most recent backup in a seperate
# directory.
LATEST=no
 
#  The maximum size of the buffer for client/server communication. e.g. 16MB
#  (maximum is 1GB)
MAX_ALLOWED_PACKET=
 
#  For connections to localhost. Sometimes the Unix socket file must be
#  specified.
SOCKET=
 
# Command to run before backups (uncomment to use)
#PREBACKUP="/etc/mysql-backup-pre"
 
# Command run after backups (uncomment to use)
#POSTBACKUP="/etc/mysql-backup-post"
 
# Backup of stored procedures and routines (comment to remove)
ROUTINES=yes

Ce code est assez explicite, les points principaux à savoir :

Appliquer un pré-traitement avant la sauvegarde

Dé-commenter la ligne :

PREBACKUP="/etc/mysql-backup-pre"

Ensuite, il suffit de créer/modifier le fichier /etc/mysql-backup-pre et d'y mettre vos instructions.

Appliquer un post-traitement avant la sauvegarde

Dé-commenter la ligne :

POSTBACKUP="/etc/mysql-backup-post"

Ensuite, il suffit de créer/modifier le fichier /etc/mysql-backup-post et d'y mettre vos instructions.

Changer le mail de destination

Il faut modifier la ligne MAILADDR="root", il suffit de remplacer root par la nouvelle adresse mail.

Changer le type de rapport envoyé par mail

Par défaut, la valeur est à quiet, c'est à dire que le système vous envois un mail que si un bug apparaît lors de l'exécution du script. Vous pouvez changer cette valeur par :

Changement de format de compression des sauvegardes

Il vous suffit de mofifier la ligne suivante :

COMP=gzip

Vous pouvez choisir entre bzip2 et gzip

Changement du répertoire des sauvegardes

Par défaut, les sauvegardes sont stockées dans le répertoire : /home/automysqlbackup

Pour choisir un autre répertoire pour la sauvegarde, il suffit de modifier cette ligne :

BACKUPDIR="/home/automysqlbackup"

Utilisation

En temps normal, vous n'avez pas à exécuter directement le script. Cron s'en charge tout seul. Cependant vous pouvez provoquer une sauvegarde en utilisant la ligne de commande suivante :

/usr/sbin/automysqlbackup

Allez un peu plus loin avec automysqlbackup

mysql.event

Par moment vous pouvez avoir ce genre de massage dans vos fichiers log :

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

Pour ne plus recevoir ce message, il vous suffit de créer un fichier dans le répertoire /etc/mysql/conf.d avec ligne suivante :

nano /etc/mysql/conf.d/automysqlbackup.cnf

ensuite d'y insérer le code suivant :

[mysqldump]
events
ignore-table = mysql.events

Auteurs et sources