Re: mysqldump en ignorant mysql
Le 22/04/10 à 00:06, Xavier Maillard <xavier@maillard.im> a écrit :
> > Voila un petit script que j'utilise pour sauvegarder mes bases:
> >
> > #!/bin/sh
> >
> > for i in `echo show databases | mysql | egrep -v '(mysql)'` ; do
> > echo $i
> > mysqldump -e $i | gzip > ~/$i.sql.gz
> > done
>
> J'espere que l'integrite et la coherence de tes donnees ne sont
> pas des choses importantes parce que c'est pas terrible tout ca;
> quid pour tes tables innodb par exemple ?
Il vaut mieux améliorer un peu avec du lock (et virer la 1re ligne de la sortie du show databases qui est le titre "Database")
OPTS="" # mettre ici les options qui vont bien pour avoir accès à toutes les bases, ex '--defaults-file=/etc/mysql/debian.cnf'
BASEDUMP='~' # le répertoire des backups
mysql $OPTS -e 'show databases' | sed -e '1d; /^mysql$/d;' | while read db
do
dbf="$BASEDUMP/$db.sql" # on peut ajouter un suffixe en fonction du jour
# par exemple date '+%A' pour tourner sur les 7 derniers jours
echo "[$(date '+%T')] début du backup de $db"
mysql -e "FLUSH TABLES WITH READ LOCK;"
mysqldump -e $i > "$dbf"
mysql -e "UNLOCK TABLES;"
bzip2 "$dbf"
echo "[$(date '+%T')] fin du backup de $db"
done
Attention :
- script écrit sans aucun test, à vous de vérifier avant de lancer
- le flush with read lock bloque toutes les bases en écriture, sur un serveur en prod ça peut vite faire exploser le load (les
thread qui veulent écrire sont mis en attente, ça dépend donc de leur nombre /s et de la durée du dump, d'où la compression
après le unlock).
--
Daniel
Quand on est trop bonne pâte, on risque de finir
dans le pétrin.
Pierre Dac
Reply to: