Backups MySQL

Mise en place d’un script et d’une tâche planifiée pour sauvegarder les bases de données.

Dans le répertoire /usr/local/sbin, créez d’abord le fichier de configuration contenant les accès à MySQL.

touch backup_mysql_config.cnf

Contenu du fichier backup_mysql_config.cnf :

[client]
user = 'MYSQL_USER'
password = 'MYSQL_PASSWORD'
host = 'localhost'

Créer ensuite le fichier backup_mysql.sh

touch backup_mysql.sh

Placez y le code suivant en spécifiant le dossier de sauvegarde ainsi que le user/mdp pour manipuler MySQL.

#!/bin/bash

# Date de la sauvegarde au format YYYYMMDD
DATE=$(date +"%Y%m%d")

# Dossier où sauvegarder les backups
# Dossier non créé par le script, veillez à le faire avant
BACKUP_DIR="/backup/mysql"

# Commandes MySQL
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

# Bases de données MySQL à ignorer
SKIPDATABASES="Database|information_schema|performance_schema|mysql|phpmyadmin"

# Durée de vie des archives
LIFETIME=7

# Création du répertoire pour les sauvegardes
mkdir -p $BACKUP_DIR/$DATE

# Select des databases
databases=`$MYSQL --defaults-extra-file=/usr/local/sbin/backup_mysql_config.cnf -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# Dump des bases de données, gzip
for db in $databases; do
echo $db
$MYSQLDUMP --defaults-extra-file=/usr/local/sbin/backup_mysql_config.cnf --force --opt --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Suppression des archives au delà de LIFETIME
find $BACKUP_DIR/* -mtime +$LIFETIME -delete

Important, il faut que l’option –defaults-extra-file=backup_mysql_config.cnf soit placée en premier dans la liste des options.

Donnez les bons droits au fichier.

chmod 755 backup_mysql.sh

Modifiez le crontab du serveur pour executer le script tous les jours à 3h du matin. Ouvrez la crontab :

vi /etc/crontab
0 3 * * * root /usr/local/sbin/backup_mysql.sh

Sauvegardez la crontab et terminez par :

service cron restart

Backup des fichiers

Suivant le même principe, nous allons procéder à la sauvegarde des dossiers des sites Internet hébergés.

Toujours dans /usr/local/sbin, créer le fichier backup_www.sh

touch backup_www.sh

Coller le contenu suivant :

#!/bin/bash

# Date de la sauvegarde au format YYYYMMDD
DATE=$(date +"%Y%m%d")

# Dossier où sauvegarder les backups
# Dossier non créé par le script, veillez à le faire avant
BACKUP_DIR="/var/backups"

# Dossiers à ignorer
IGNORED="html"

# Durée de vie des archives
LIFETIME=3

FOLDERS=`ls -d /var/www/*/ | grep -Ev "($IGNORED)"`
for folder in $FOLDERS; do
archive=$BACKUP_DIR/$DATE/$(basename $folder)".tar.gz"
mkdir -p $BACKUP_DIR/$DATE
tar zcvfP $archive $folder
echo Archive : $archive du dossier $folder
done

# Suppression des archives au delà de LIFETIME
find $BACKUP_DIR/* -mtime +$RETENTION -delete

Modifiez le crontab du serveur pour executer le script tous les mardis à 1h du matin. Ouvrez la crontab :

vi /etc/crontab
# Tous les mardis à 1h du matin
* 1 * * 2 root /usr/local/sbin/backup_www.sh >/dev/null 2>&1

Sauvegardez la crontab et terminez par :

service cron restart

Lien utiles :

  • https://crontab-generator.org/