Tags pour la question fréquent:
sauvegarde Cron Linux MySQL

Aidez-nous par évaluer cet article

Score de 4, basé sur 2 votes

MySQL - backup automatique de base de données

Dernière mise à jour: 19/01/2016

Votre serveur virtuel Kinamo (VPS) ou serveur cloud Kinamo vous permet d'installer vos propres scripts. Kinamo vous propose un script qui vous permet de sauvegarder le contenu de votre base de données quotidiennement dans un dossier chronologique.

L'avantage du script présenté, c'est qu'il vous permet de créer une copie consistente de votre base de données MySQL à un certain point, et de la remettre en place rapidement. Kinamo effectue des backups complets de votre serveur toutes les nuits, mais il est plus aisé de remettre à jour votre base de données comme décrit ci-dessous plutôt que de devoir faire appel au service Support de Kinamo pour un restore à partir de l'image de votre serveur.

Kinamo vous suggère de placer le script suivant dans le dossier /usr/sbin/local.
Pour rendre les choses faciles, nous avons appelé le script kinamo_mysqlbackup.sh.

#!/bin/bash

# Configuration de base: datestamp e.g. YYYYMMDD

DATE=$(date +"%Y%m%d")

# Dossier où sauvegarder les backups (créez le d'abord!)

BACKUP_DIR="/backup/mysql"

# Identifiants MySQL

MYSQL_USER="root"
MYSQL_PASSWORD="YOURSECUREPASSWORD"

# Commandes MySQL (aucune raison de modifier ceci)

MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

# Bases de données MySQL à ignorer

SKIPDATABASES="Database|information_schema|performance_schema|mysql"

# Nombre de jours à garder les dossiers (seront effacés après X jours)

RETENTION=14

# ---- NE RIEN MODIFIER SOUS CETTE LIGNE ------------------------------------------
#
# Create a new directory into backup directory location for this date

mkdir -p $BACKUP_DIR/$DATE

# Retrieve a list of all databases

databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# Dumb the databases in seperate names and gzip the .sql file

for db in $databases; do
echo $db
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Remove files older than X days

find $BACKUP_DIR/* -mtime +$RETENTION -delete

Copier et collez le contenu complet du script ci-dessus, et sauvegardez-le sous le nom kinamo_mysqlbackup.sh dans le dossier /usr/local/sbin/.

N'oubliez pas de paramétrer le script avec vos propres identifiants, et de créer le dossier de sauvegarde /backup/mysql.

Ajoutez les droits d'exécution au script avec la commande suivante:

chmod 755 kinamo_mysqlbackup.sh

Modifiez le crontab du serveur pour executer le script tous les jours à 1h:

vi /etc/crontab

0 1 * * * root /usr/local/sbin/kinamo_mysqlbackup.sh

Sauvegardez le fichier cron et redémarrer le service, ce qui se fait avec une des commandes suivantes selon votre distribution Linux:

service cron restart
service crond restart

Le script assurera un backup quotidien de vos bases de données, que vous retrouverez sous /backup/mysql/YYYYMMDD/<dump de votre db>.