Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:sauvegarder_automatiquement_ses_bases_de_donnees [Le 30/04/2013, 17:30]
82.236.218.130 [Création des scripts]
tutoriel:sauvegarder_automatiquement_ses_bases_de_donnees [Le 24/02/2023, 15:53] (Version actuelle)
85.14.130.61 [Création du script]
Ligne 1: Ligne 1:
-{{tag>dapper ​tutoriel sauvegarde serveur sgbd mysql }}+{{tag>​tutoriel sauvegarde serveur sgbd mysql }}
  
 ---- ----
 + 
 ====== Sauvegarder automatiquement ses bases de données MySQL ====== ====== Sauvegarder automatiquement ses bases de données MySQL ======
  
Ligne 20: Ligne 20:
  
  
-===== Création ​des scripts ​=====+===== Création ​du script ​=====
  
-Nous allons créer ​nos scripts ​dans le répertoire **/​root/​scripts/​**. Seul root y aura accès en lecture (et écriture).+Nous allons créer ​le script ​dans le répertoire **/​root/​scripts/​**(( ou /​user/​local/​bin … https://​askubuntu.com/​questions/​998452/​where-should-i-put-my-bash-scripts)). Seul root y aura accès en lecture (et écriture).
  
-Nous créons un premier ​script ​que l'on appellera backup_bdd.sh qui contient ​: +Si le sous répertoire ​script ​n'existe pas déjà, le créer ​
- +<​code> ​sudo mkdir /​root/​scripts
-<​code>​#​!/​bin/​bash +
-+
-## on se place dans le repertoire ou l'on veut sauvegarder les bases +
-+
-cd /​root/​scripts/backups/ +
- +
-for i in mon_site mon_forum mon_blog; do +
- +
-## Sauvegarde des bases de donnees en fichiers .sql +
-mysqldump -uroot -pmonpass $i > ${i}_`date +"​%Y-%m-%d"​`.sql +
- +
-## Compression des exports en tar.bz2 (le meilleur taux de compression) +
-tar jcf ${i}_`date +"​%Y-%m-%d"​`.sql.tar.bz2 ${i}_`date +"​%Y-%m-%d"​`.sql +
- +
-## Suppression des exports non compresses +
-rm ${i}_`date +"​%Y-%m-%d"​`.sql +
- +
-done+
 </​code>​ </​code>​
  
-Mettez dans la ligne+Le script s'​appellera backup_bdd.sh et contient :
  
-<​code>​for i in mon_site mon_forum mon_blog; do</code>+<​code ​bash>#!/bin/bash 
 +# Script de sauvegarde des bases de données mysql/​mariadb 
 +# Les valeurs à paramétrer sont en fin de script dans la fonction main()
  
-ou pour avoir toutes vos bases de données, remplacer cette ligne par +get_databases_to_backup() { 
 +    mysql_command=$(command -v mysql) 
 +    databases_list=$($mysql_command --defaults-file=/​etc/​mysql/​debian.cnf -Bse 'show databases'​)
  
-<​code>​ +    for exclude in $databases_exclude_list 
-# Récupère toutes les bases de données +    do 
-databases=`mysql --user=root --password=monpass ​-"SHOW DATABASES;" | grep -Ev "(Database|information_schema)"`+       databases_list=${databases_list//​$exclude/​} 
 +    done 
 +
 +dump_databases () { 
 +    ext="​.sql.gz"​ 
 +    mysqldump_command=$(command ​-v mysqldump) 
 +    compress_command=$(command ​-v gzip) 
 +    current_date=$(date +%F_%Hh%M) 
 +    cd "${backup_folder}" || exit 
 +    for database in $databases_list 
 +    do 
 +        $mysqldump_command ​--defaults-file=/​etc/​mysql/​debian.cnf "​$database" | $compress_command ​ > "${database}"​_"​${current_date}"​${ext} 
 +        echo "​Backing up database: ${database}…"​ 
 +    done
  
-# parcours les bases +    echo "​$(date +%c): Backup complete!"​ 
-for i in $databases; do +
-</code>+delete_old_backups() { 
 +    find_command=$(command -v find) 
 +    cd "​${backup_folder}"​ || exit 
 +    $find_command .-mtime +"​${delete_backups_older_than_days}"​ -type f -exec rm -v {}  \; 
 +}
  
-la liste de toutes les bases de données que vous voulez sauvegarder.+main() { 
 +    # toujours exclure information_schema performance_schema ​de la sauvegarde sinon le script générera des erreurs  
 +    databases_exclude_list="​mysql phpmyadmin information_schema performance_schema"​ 
 +     
 +    # choix du dossier ​de destination des sauvegardes à ajuster à vos besoins 
 +    backup_folder="/​srv/​mysql_backups"​ 
 +    if [ ! -d "​$backup_folder"​ ] ; then 
 +        mkdir -p "​$backup_folder"​ 
 +    fi
  
-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 +"​%Y-%m-%d"​` qui générera une date au format AAAA-MM-JJ.+    get_databases_to_backup 
 +    dump_databases
  
-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.+    # nombre ​de jours pendant lesquels il faut conserver les sauvegardes,​ -1 si illimité 
 +    delete_backups_older_than_days=1 
 +    if [ $delete_backups_older_than_days != "​-1"​ ] ; then 
 +        delete_old_backups 
 +    fi 
 +}
  
-On nomme ce fichier clean_backups.sh et son contenu est :+main
  
-<​code>#​!/​bin/​bash 
-# 
-## Supprime les sauvegardes vieilles de plus de 5 jours 
-# 
-find /​root/​scripts/​backups/​ -type f -mtime +4 -delete 
 </​code>​ </​code>​
  
- 
-Note : si votre mot de passe ou votre utilisateur contient les caractères : "​!@#​$%^"​ vous recevrez l'​erreur 1045 "​Access denied for user '​xxx'​@'​localhost " ​ 
- 
-pour cela (à part changer de user/pass) il faut modifier la ligne : 
- 
-<​code>​mysqldump -uroot -pmonpass $i > ${i}_`date +"​%Y-%m-%d"​`.sql</​code>​ 
- 
-par 
- 
-<​code>​mysqldump --user=xxx --password=xxx $i > ${i}_`date +"​%Y-%m-%d"​`.sql</​code>​ 
  
  
 ===== Modification des permissions ===== ===== Modification des permissions =====
-Nous allons faire en sorte que seul root puisse lire, exécuter, et modifier ​ces 2 scripts : +Nous allons faire en sorte que seul root puisse lire, exécuter, et modifier ​ce scripts : 
-  cd /​root/​scripts && sudo chmod 700 backup_bdd.sh clean_backups.sh+  cd /​root/​scripts && sudo chmod 700 backup_bdd.sh
  
  
Ligne 95: Ligne 97:
 ===== Programmation de l'​exécution des scripts avec Cron ===== ===== Programmation de l'​exécution des scripts avec Cron =====
  
-<note tip>Si votre ordinateur n'est pas allumé en permanence, il vaut mieux utiliser ​[[:fcron|fcron]], car cron ne s'exécute qu'à une heure précise de la journée alors que fcron prend en compte le temps pendant lequel reste allumé la machine</note>+FIXME Consulter la page [[:cron]] où il est préconisé d'utiliser <code bash>​crontab -e</codepour modifier les CRON, les infos ci-dessous, si elles ne sont pas obsolètes, ne semble plus recommandées! 
  
 Dans le répertoire **/etc**, vous pouvez voir qu'il existe des répertoires cron.daily, cron.hourly,​ etc Dans le répertoire **/etc**, vous pouvez voir qu'il existe des répertoires cron.daily, cron.hourly,​ etc
Ligne 101: Ligne 104:
 dans le fichier **/​etc/​crontab**,​ est notée la fréquence de lancement des tâches cron. Vous pouvez voir que le contenu du répertoire **cron.daily** est exécuté par défaut tous les jours à 6h25. vous pouvez modifier l'​horaire si vous le souhaitez. Par exemple en y mettant l'​heure où votre site est le moins fréquenté (en général vers 3h du matin). Pour plus d'​informations sur la programmation des tâches cron consultez la page sur [[:cron]]. dans le fichier **/​etc/​crontab**,​ est notée la fréquence de lancement des tâches cron. Vous pouvez voir que le contenu du répertoire **cron.daily** est exécuté par défaut tous les jours à 6h25. vous pouvez modifier l'​horaire si vous le souhaitez. Par exemple en y mettant l'​heure où votre site est le moins fréquenté (en général vers 3h du matin). Pour plus d'​informations sur la programmation des tâches cron consultez la page sur [[:cron]].
  
-Donc comme nous l'​avons dit, les scripts contenus dans le répertoire cron.daily seront exécutés à l'​heure définie dans crontab. Nous allons donc y placer ​des liens vers nos 2 scripts en utilisant une notation à chiffres pour être sûr qu'ils seront exécutés dans l'​ordre ​:+Donc comme nous l'​avons dit, les scripts contenus dans le répertoire cron.daily seront exécutés à l'​heure définie dans crontab. Nous allons donc y placer ​un lien vers notre script  ​:
   cd /​etc/​cron.daily   cd /​etc/​cron.daily
   sudo ln -s /​root/​scripts/​backup_bdd.sh 01-backup_bdd   sudo ln -s /​root/​scripts/​backup_bdd.sh 01-backup_bdd
-  sudo ln -s /​root/​scripts/​clean_backups.sh 02-clean_backups 
  
-<​note>​Bien sûr, si vous avez déjà des scripts numérotés,​ incrémentez les numéros en fonction de ceux-ci...</​note>​ 
  
 <note important>​ <note important>​
Ligne 121: Ligne 122:
 ---- ----
  
- //​Contributeurs : [[:​utilisateurs:​_Enchained]]//​+ //​Contributeurs : [[:​utilisateurs:​_Enchained]], [[:​utilisateurs:​_bruno]]//
  • tutoriel/sauvegarder_automatiquement_ses_bases_de_donnees.1367335801.txt.gz
  • Dernière modification: Le 30/04/2013, 17:30
  • par 82.236.218.130