Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tutoriel:sauvegarder_automatiquement_ses_bases_de_donnees [Le 18/09/2008, 10:08] – 80.13.42.105, 127.0.0.1 | tutoriel:sauvegarder_automatiquement_ses_bases_de_donnees [Le 25/03/2026, 02:16] (Version actuelle) – +tag vétuste / à supprimer krodelabestiole | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag>dapper edgy feisty serveur | + | {{tag> |
| ---- | ---- | ||
| + | |||
| + | ====== Sauvegarder automatiquement ses bases de données MySQL ====== | ||
| - | ====== Sauvegarder automatiquement ses bases de données | + | Ce mini tutoriel vous présente une méthode simple pour mettre en place une sauvegarde automatique des bases de données |
| - | Ce mini tutoriel vous présente une méthode simple de mettre en place une sauvegarde automatique des bases de données | + | <note tip>Bien que le contenu |
| Pour ce faire, nous allons utiliser 2 scripts bash et les tâches cron. | Pour ce faire, nous allons utiliser 2 scripts bash et les tâches cron. | ||
| Ligne 13: | Ligne 15: | ||
| * Nous nous connectons au serveur de base de données avec le login **root** et le mot de passe **monpass**. | * Nous nous connectons au serveur de base de données avec le login **root** et le mot de passe **monpass**. | ||
| - | Attention : en aucun cas vous devez sauvegarder la base de données "à l' | + | Attention : en aucun cas vous devez sauvegarder la base de données "à l' |
| + | Pour sauvegarder les fichiers de votre site accessibles en ftp uniquement, voir avec [[: | ||
| - | ===== Pré-requis ===== | ||
| - | * Avoir un serveur MySQL contenant des bases de données à sauvegarder (voir [[: | ||
| - | * Une connaissance de ce qu'est une tâche [[:cron]] est un plus. | ||
| - | * Savoir [[: | ||
| + | ===== Création du script ===== | ||
| + | Nous allons créer le script dans le répertoire **/ | ||
| + | Si le sous répertoire script n' | ||
| + | < | ||
| + | </ | ||
| + | Le script s' | ||
| - | ===== Création des scripts ===== | + | <code bash>#!/bin/bash |
| - | Nous allons créer nos scripts dans le répertoire **/root/scripts/**. Seul root y aura accès | + | # Script de sauvegarde des bases de données mysql/mariadb |
| - | Nous créons un premier script que l'on appelera backup_bdd.sh qui contient : | + | # Les valeurs à paramétrer sont en fin de script dans la fonction main() |
| + | get_databases_to_backup() { | ||
| + | mysql_command=$(command -v mysql) | ||
| + | databases_list=$($mysql_command --defaults-file=/ | ||
| - | < | + | for exclude in $databases_exclude_list |
| - | # | + | do |
| - | ## on se place dans le repertoire ou l'on veut sauvegarder les bases | + | |
| - | # | + | done |
| - | cd /root/scripts/ | + | } |
| + | dump_databases () { | ||
| + | | ||
| + | mysqldump_command=$(command -v mysqldump) | ||
| + | compress_command=$(command -v gzip) | ||
| + | current_date=$(date +%F_%Hh%M) | ||
| + | | ||
| + | for database in $databases_list | ||
| + | do | ||
| + | $mysqldump_command --defaults-file=/etc/mysql/debian.cnf " | ||
| + | echo " | ||
| + | done | ||
| - | for i in mon_site mon_forum mon_blog; do | + | echo " |
| + | } | ||
| + | delete_old_backups() { | ||
| + | find_command=$(command -v find) | ||
| + | cd " | ||
| + | $find_command ./ -mtime +" | ||
| + | } | ||
| - | ## Sauvegarde | + | main() { |
| - | mysqldump | + | |
| + | databases_exclude_list=" | ||
| + | |||
| + | # choix du dossier | ||
| + | backup_folder="/ | ||
| + | if [ ! -d "$backup_folder" | ||
| + | mkdir -p " | ||
| + | fi | ||
| - | ## Compression des exports en tar.bz2 (le meilleur taux de compression) | + | get_databases_to_backup |
| - | tar jcf ${i}_`date +%D | sed ' | + | |
| - | ## Suppression des exports non compresses | + | |
| - | rm ${i}_`date +%D | sed 's;/;-;g' | + | |
| + | if [ $delete_backups_older_than_days != "-1" ] ; then | ||
| + | delete_old_backups | ||
| + | fi | ||
| + | } | ||
| - | done | + | main |
| - | </ | + | |
| - | + | ||
| - | Mettez dans la ligne | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | la liste de toutes les bases de données que vous voulez sauvegarder. | + | |
| - | + | ||
| - | Par sécurité, on ne veut pas garder que la dernière sauvegarde faite (elle peut être corrompue). Nous insérons donc la date du jour dans le nom de fichier avec `date +%D | sed ' | + | |
| - | + | ||
| - | Il faut créer un second script pour faire le ménage régulièrement dans le dossier de backup pour éviter son embonpoint inévitable. | + | |
| - | + | ||
| - | On nomme ce fichier clean_backups.sh et son contenu est : | + | |
| - | < | ||
| - | # | ||
| - | ## Supprime les sauvegardes vieilles de plus de 5 jours | ||
| - | # | ||
| - | find / | ||
| </ | </ | ||
| - | Note : si votre mot de passe ou votre utilisateur contient les caractères : " | ||
| - | pour cela (à part changer de user/pass) il faut modifier | + | ===== Modification des permissions ===== |
| + | Nous allons faire en sorte que seul root puisse lire, exécuter, et modifier | ||
| + | cd / | ||
| - | mysqldump -uroot -pmonpass $i > ${i}_`date +%D | sed ' | ||
| - | par | ||
| - | mysqldump --user=xxx --password=xxx $i > ${i}_`date +%D | sed 's;/; | + | ===== Programmation de l'exécution des scripts avec Cron ===== |
| + | FIXME Consulter la page [[:cron]] où il est préconisé d' | ||
| - | ===== Modification des permissions ===== | ||
| - | Nous allons faire en sorte que seul root puisse lire, exécuter, et modifier ces 2 scripts : | ||
| - | cd / | ||
| - | |||
| - | ===== Programmation de l' | ||
| Dans le répertoire **/etc**, vous pouvez voir qu'il existe des répertoires cron.daily, cron.hourly, | Dans le répertoire **/etc**, vous pouvez voir qu'il existe des répertoires cron.daily, cron.hourly, | ||
| dans le fichier **/ | dans le fichier **/ | ||
| - | Donc comme nous l' | + | Donc comme nous l' |
| cd / | cd / | ||
| sudo ln -s / | sudo ln -s / | ||
| - | sudo ln -s / | ||
| - | < | + | |
| + | < | ||
| + | Surtout ne faites pas de lien symbolique avec un point " | ||
| + | </ | ||
| C'est fini :) | C'est fini :) | ||
| Ligne 107: | Ligne 122: | ||
| ---- | ---- | ||
| - | // | + | // |
