03-06

Backup MySQL, remplacer le all-databases pour avoir un accès direct à une base de données

Si vous effectué vos backups MySQL par la commande --all-databases et qu'il vous arrive, de devoir restaurer une seule base de données, l'opération peut être délicate et moins "propre" si vous devez, par exemple, rendre une base de données précises à un tiers. Commande habituelle :
## Je ne mets pas les informations de login
mysqldump --all-databases --opt > all-databases.sql
Voici un petit script bash qui vous permettra de backuper toutes les tables très simplement. J'utilise la fonction SHOW DATABASES; de MySQL pour afficher la liste des bases de données et je les backup. La fonction grep me permet de nettoyer ce dont je n'ai pas besoin, attention à ne pas avoir de table contenant ces mots là. Script de backup automatique de chaque table
#!/bin/bash
DBPASS="passroot"
DBUSER="root"
DBHOST="127.0.0.1"
BACKUPDIR="/data/bkp/sql"
FILEFORMAT=`date +"%d"`_`hostname -f`.sql
for database in `mysql --user=$DBUSER --password=$DBPASS --host=$DBHOST -e "SHOW DATABASES;" |grep -v "Database\|information_schema\|mysql" | cut -d " " -f 1`;
do
	mysqldump --user=$DBUSER --password=$DBPASS --host=$DBHOST --opt $database > $BACKUPDIR/$database"_"$FILEFORMAT;
	sleep 1;
done;
Voilà, avec ces commandes simples, vous devriez simplement pouvoir restaurer très simplement une base de données précise.

 

 

2 Commentaires pour ce billet.

 

 

  1. Salut,
    Pourquoi un "sleep 1;" dans la boucle?
    Pour simplement "reposer" un peu le serveur ou pour autre chose?

  2. De mon côté j'en mets un peu partout (des fois de 5 secondes voir plus)
    Le dump va LOCKer les tables, si c'est une base avec plus de 100 requêtes/secondes au moment où le LOCK va sauter, elles vont s'écouler donc pour qu'elles s'écoulent "normalement" sans charge supplémentaire je "pose" le dump une seconde.
    Pour une base de données à plus de 2000 queries/seconde je fais un backup "table par table" avec une pause de 2 minutes entre chaque table, car ça atteins très vite le "too many connection" qu'on connait. Donc le temps que "tout" redevienne à la normal voilà.

    NB: désolé pour le commentaire non publié aussitôt.

 

Votre commentaire