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

## Je ne mets pas les informations de login mysqldump --all-databases --opt > all-databases.sqlVoici 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.
Votre commentaire
Salut,
Pourquoi un "sleep 1;" dans la boucle?
Pour simplement "reposer" un peu le serveur ou pour autre chose?
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.