Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Sauver et restaurer rapidement sa base MySQL

10/06/2010
Que ce soit pour sauver ou pour charger une sauvegarde de base de données, il y a deux solutions rapides, ne nécessitant aucune installation.

Sauvegarder votre base de données MySQL

  • Sous PHPMyAdmin : il faut utiliser le menu Exporter. Les options sont variées, la sauvegarde se fait rapidement.
  • En ligne de commande : cette option est plus rapide mais moins facilement paramétrable.
    "mysqldump.exe" -u root mabase -p > d:\Sauvegardes\base_sauve.sql

Dans ce cas précis, il s'agit d'une base de données nommée mabase, sur Windows, sauvegardée sur le lecteur D. Ajoutez le paramètre -p pour préciser le mot de passe. Sur une base de production, afin de ne pas bloquer les tables, il faut ajouter :

--single-transaction --quick --lock-tables=false

single-transaction sert pour les tables InnoDB, lock-tables pour les table MyIsam et quickpour lire ligne par ligne plutôt qu'en une seule fois.

Restaurer la base de données MySQL

La restauration sous PHPMyAdmin peut demander plusieurs dizaines de minutes alors que quelques secondes suffisent en ligne de commande.

  • Sous PHPMyAdmin : si la base est trop volumineuse, il faut que le serveur soit paramétré pour accepter un gros fichier. Modifier le PHP.INI et ajouter :
    upload_max_filesize = 170M
    post_max_size = 170M
    max_execution_time = -1
    Dans le menu SQL, choisir le fichier à importer.
  • En ligne de commande :
    "mysql.exe" -u root mabase -p < d:\Sauvegardes\base_sauve.sql

Dans le cas où le fichier serait compressé (.gz ou .zip), décompressez-le avant (avec un logiciel comme 7Zip ou WinRar). D'autre part, PHPMyAdmin exporte par défaut en UTF8. Pour éviter que les accents ne se transforment en caractères bizarres, vous pouvez préciser le jeu de caractères :

"mysql.exe" -u root mabase --default_character_set utf8 < d:\Sauvegardes\base_sauve.sql

Exécuter une sauvegarde de toutes les bases sur Windows

Le script Batch sauvegarde_bases_mysql.bat(4 Ko) que je propose ici vous permet :

  • de sauvegarder toutes vos bases MySQL sur Windows en une seule fois
  • de ne pas lancer de sauvegarde si la base est inchangée
  • de gérer la purge
  • de gérer les erreurs de sauvegarde, en renvoyant un code retour

Il faut le modifier pour préciser :

  • le chemin vers mysqldump (ligne 9)
  • le chemin vers mysql (ligne 10)
  • le nombre de fichiers à conserver par base (ligne 11)
  • les paramètres de chaque base (lignes 16 à 20) : identifiant, mot de passe, nom de la base, répertoire destination, fichier destination.

Sauvegarder toutes les bases de données en une fois

Aller dans le répertoire des binaires de MySQL et lancez la commande suivante :

mysqldump -u root -p --all-databases > bases.sql

Exécuter une sauvegarde toutes les bases sur Linux (Ubuntu)

Le script ci-dessous permet de sauvegarder toutes les bases de données MySQL d'un système sous Ubuntu, de les compresser et de purger les plus anciennes.

Dans l'en-tête est précisé qu'il faut donner les droits du script en écriture et qu'il faut créer une tâche planifiée permettant le lancement régulier de la sauvegarde.

#!/bin/bash
# 1. Donner le droit en écriture : sudo chown -R $(whoami) /usr/local/bin
# 2. Créer un fichier vide : nano /usr/local/bin/sauvebdd.sh
# 3. Donner le droit en exécution : chmod 755 /usr/local/bin/sauvebdd.sh
# 4. Créer une tâche planifiée : sudo nano /etc/crontab puis 0 0 * * * root /usr/local/bin/sauvebdd.sh puis sudo service cron restart
echo Sauvegarde des bases MySQL
# Dossier desti des sauvegardes
REP_SAUVEGARDE="/var/sauvegardes"
# Bases de données à ignorer
IGNORE_BASES="Database|information_schema|performance_schema|mysql|phpmyadmin|sys"
# Identifiants MySQL de connexion
MYSQL_USER="ident_admin"
MYSQL_PASSWORD="mdp_admin"
# Nbre de jours de sauvegarde à conserver
NB_JOURS_SAUVEGARDES=15
# Format du répertoire sauvegarde : YYYYMMDD
DATE=$(date +"%Y%m%d")
# Crée le répertoire de destination
sudo mkdir -p $REP_SAUVEGARDE
# Récupère la liste des bases de données en ignorant celles système
databases=`/usr/bin/mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($IGNORE_BASES)"`
for db in $databases; do
    echo Sauvegarde $db
   
    # Crée le répertoire si inexistant
    sudo mkdir -p $REP_SAUVEGARDE/$db
    # Alloue les droits en écriture
    sudo chmod 0777 $REP_SAUVEGARDE/$db
    /usr/bin/mysqldump --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --extended-insert --single-transaction --skip-lock-tables --quick --net-buffer-length=6553 --databases $db | gzip > "$REP_SAUVEGARDE/$db/$DATE-$db.gz"
   
    # Supprime anciennes archives
    find $REP_SAUVEGARDE/$db* -mtime +$NB_JOURS_SAUVEGARDES -delete
    done
Dernière modification le 13/06/2020 - Quillevere.net

Rechercher sur le site

rss RSS info Informations